Verilog(未完待續)

Verilog教程

這個教程寫的很好,可以多看看。本篇還沒整理完。

一、Verilog簡介

什么是FPGA?一種可通過編程來修改其邏輯功能的數字集成電路(芯片)

與單片機的區別?對單片機編程并不改變其地電路的內部結構,只是根據要求實現的功能來編寫運行的程序(指令)。舉例:單片機就兩個uart,但是我想用4個uart,單片機就沒辦法了。

什么是HDL?(hardware description language)硬件描述語言,用于描述數字電路結構和功能的語言。

Verilog和C的區別?Verilog硬件描述語言,在編譯下載到FPGA之后,會生成電路,所以Verilog是并行運行的。C語言軟件編程語言,編譯下載到單片機之后,是存儲器中的一組指令。而單片機處理軟件指令需要取指、譯碼、執行,這個過程是串行執行的。


二、Verilog基礎語法

2.1基礎知識

2.1.1邏輯值

0:低電平,GND。

1:高電平,VCC。

X:未知,高或低。

Z:高阻態,外部沒有激勵信號,是一個懸空狀態。

2.1.2數字進制格式

二進制(b)、八進制(o)、十進制(d)、十六進制(h)

2.1.3標識符

用于定義模塊名、端口名、信號名。

字母、數字、$符號、_下劃線。第一個字符必須是字母或者下劃線。

嚴格區分大小寫。

不建議大小寫混合使用。

普通內部信號建議全部小寫。

2.2數據類型

2.2.1寄存器類型reg

數據存儲單元,默認初始值是不定值x。未寫位寬的時候默認32位

reg類型數據只能在always和initial中賦值。

如果該過程語句描述的是時序邏輯,即always語句帶有時鐘信號,則該寄存器變量對應為觸發器。

如果該過程語句描述的是組合邏輯,即always語句不帶有時鐘信號,則該寄存器變量對應為硬件連線。

2.2.2線網類型wire、tri

線網類型便是結構實體之間的物理連線。不能存儲值,它的值由驅動的元件所決定。

驅動線網類型變量的元件有門、連續賦值語句、assign等。

如果沒有驅動元件連接到線網類型的變量上,則該變量就是高阻態。

2.2.3參數類型parameter

常量,類似#define。可以一次定義多個參數,參數與參數之間需要用逗號隔開。每個參數定義的右邊必須是一個常數表達式。

#

1.參數的傳遞

模塊定義的時候傳入參數,模塊實例化的時候傳入參數。

2.時序仿真中的延時

//延時2.5個時間單位后執行sys_clk_i信號的翻轉
always #2.5 sys_clk_i = ~sys_clk_i;

2.3運算符

算數運算符:+、-、*、/、%

關系運算符:>、<、<=、>=、==、!=

邏輯運算符:!、&&、||

條件操作符:?:

位運算符:~、&、|、^

移位運算符:<<、>>;注意:左移位寬要增加、右移位寬不變。

拼接運算符:{}。{a,b[3:0]}

2.3.1優先級

2.4編譯指令

1.`define, `undef

2.`include

3.`timescale

用于定義時延、仿真的單位和精度

`timescale      time_unit / time_precision
  • time_unit 表示時間單位,time_precision 表示時間精度,
  • 單位 s(秒),ms(毫秒),us(微妙),ns(納秒),ps(皮秒)和 fs(飛秒)。
  • 時間單位≥時間精度
  • 編譯過程中,`timescale會影響后面的模塊中的時延值。直到遇到另一個`timescale或者`resetall。
  • 沒有默認的`timescale,沒有指定的情況下,會繼承前面編譯模塊的`timescale參數,可能導致設計出錯。
  • 一個設計多個模塊都有`timescale時,時延單位不受影響,但是時延精度會換算成最小時延精度
  • 如果有并行子模塊,子模塊間的 `timescale 并不會相互影響。
  • 時間精度設置是會影響仿真時間的。時間精度越小,仿真時占用內存越多,實際使用的仿真時間就越長。所以如果沒有必要,應盡量將時間精度設置的大一些。
  • 如果延時時間的最小位數小于時間精度,將會四舍五入。例如時間單位為10ns,精度為1ns,#1.04表示延時1.04個時間單位=1.04x10ns=10.4ns,但精度無法表示0.1ns,#1.04≈10ns

4.`default_nettype

5.`resetall

6.`celldefine, `endcelldefine

7.`unconnected_drive, `nounconnected_drive


三、程序框架

3.1Verilog注釋

//、/**/、

3.2Verilog關鍵字

3.3Verilog程序框架

模塊的結構

一個模塊由兩部分組成:一部分描述接口,一部分描述邏輯功能。

端口定義、IO說明、內部信號聲明、功能定義。

模塊的調用


四、高級知識點

4.1結構語句

1.?initial

只執行一次。

常用于測試文件的編寫,用來產生仿真測試信號(激勵信號),或者用于對存儲器變量賦初值。

2. always

一直不斷地重復活動。

但是只有和一定的時間控制結合在一起才有作用。

always時間控制可以是沿觸發或者電平觸發。敏感列表

沿觸發:

多個信號中間要用or連接。(posedge,negedge)

電平觸發:(*)

4.2賦值語句

1.阻塞賦值(與C語言一樣)

b = a;

描述組合邏輯時,用阻塞賦值。

2.非阻塞賦值(并行同時賦值)

b <= a;

只能用于對寄存器類型的變量進行賦值,只能用于initial和always中。

描述時序邏輯時,用非阻塞賦值。

注意:在同一個always塊中不要既用非阻塞賦值又要阻塞賦值,不允許在多個always塊中對同一個變量進行賦值。

組合邏輯

任意時刻輸出僅僅取決于該時刻的輸入,與電路原來的狀態無關。

時序邏輯

任意時刻的輸出不僅取決于當時的輸入信號,而且還取決于電路原來的狀態。或者說還與之前的輸入有關,因此時序邏輯必須具備記憶功能。

4.3條件語句

條件語句必須在過程塊(initial、always)中使用。

if-else

0,x,z按假處理。

if和else后面可以用begin end包含多個語句。

case

位寬必須相等。

casez,不用考慮表達式中的高阻值。

casex,不用考慮高阻值z和不定值x。

4.4函數

4.5任務

  • 任務的輸入輸出可以沒有或者多個,且端口聲明可以為 inout 型
  • 不能出現initial和always過程塊。但可以包含其他時序控制,如延時語句。
  • 任務可以調用函數和任務。
  • 任務可以作為一條單獨的語句出現語句塊中。

4.5.1 任務聲明

任務在模塊中任意位置定義,并在模塊內任意位置引用,作用范圍也局限于此模塊。

模塊內子程序出現下面任意一個條件時,則必須使用任務而不能使用函數

  • 1)子程序中包含時序控制邏輯,例如延遲,事件控制等
  • 2)沒有輸入變量
  • 3)沒有輸出或輸出端的數量大于 1

對 output 信號賦值時也不要用關鍵字 assign。為避免時序錯亂,建議 output 信號采用阻塞賦值。

task       task_id ;port_declaration ;procedural_statement ;
endtask
task xor_oper_iner(input [N-1:0] ? numa,input [N-1:0] ? numb,output [N-1:0] ?numco ?) ; #3 ?numco ? ? ? = numa ^ numb ;
endtask

4.5.2 任務調用

task_id(input1, input2, …,outpu1, output2, …);

輸入端連接的模塊內信號可以是 wire 型,也可以是 reg 型。輸出端連接的模塊內信號要求一定是 reg 型

4.6狀態機

4.6.1狀態機概念FSM

在有限個狀態之間按一定規律轉換的時序電路

4.6.2狀態機模型

狀態寄存器由一組觸發器組成,用來記憶狀態機當前所處的狀態,狀態的改變只發生在時鐘的跳變沿。

4.6.3狀態機設計

狀態空間定義

狀態跳轉(時序邏輯)

下個狀態判斷(組合邏輯)

各個狀態下的動作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713834.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Parallel Computing - 一文講懂并行計算

目錄 Throughput/LatencySerial ComputingParallel ComputingTypes of parallel computersSimple 4-width SIMDAmdahls lawTypes of parallelism**Data Parallel Model**Task parallel PartitioningDomain DecompositionFunctional Decomposition CommunicationsExample that d…

java調用chatgpt接口,實現專屬于自己的人工智能助手

文章目錄 前言導包基本說明請求參數響應參數創建請求和響應的VO類 代碼編寫使用最后說明 前言 今天突然突發奇想&#xff0c;就想要用java來調用chatget的接口&#xff0c;實現自己的聊天機器人&#xff0c;但是網上找文章&#xff0c;屬實是少的可憐(可能是不讓發吧)。找到了…

ESP32 web 對接華為云平臺--MQTT協議

文章目錄 前言一、MQTT協議二、如何使用MQTT協議對接華為云1.注冊華為云賬號2.設備接入中創建資源空間3.如何連接4.通過MQTT.fx工具做初步對接4.1 設置連接信息4.2 連接平臺 5.查看平臺設備信息 三. 設備測對接平臺1.ESP測引入MQTT庫2.編碼2.1前端編碼修改2.2 后端接口修改 3.M…

element-plus+vue3表單含圖片(可預覽)(線上圖片)

一、要實現的效果&#xff1a; 二、如果期間出現這樣的效果&#xff08;表格穿透過來了&#xff09;&#xff0c;加上了這行代碼就可以了&#xff1a; preview-teleported“true” 如果僅測試用&#xff0c;建議使用線上圖片鏈接的形式&#xff0c;免得本地地址不生效&#xf…

SSH 的兩種認證方式

SSH&#xff08;Secure Shell&#xff09;提供了幾種不同的認證方式&#xff0c;其中兩種最常見的方式是密碼認證和密鑰認證。以下是它們的詳細介紹&#xff1a; 密碼認證&#xff1a; 原理&#xff1a;用戶在連接時輸入用戶名和密碼&#xff0c;然后將密碼傳輸到遠程服務器進行…

數學實驗-Matlab使用(1)

使用方法以及筆記均在文件中 class1_func1.m function f class1_func1(x) % f為輸出&#xff0c;輸出有多個時需要用中括號以矩陣的方式包起來 % x為輸入f sin(x)class1_func2.m function [a,b,u,v] class1_func2(x,y)[a,b] eig(x)[u,v] eig(y)class1.m % 當語句后有…

yolov9從頭開始訓練

yolov9從頭開始訓練 一、準備數據集 數據集相關文件存放布局如下 yolov9-datasets ├── train │ ├── images │ │ ├── image.jpg │ │ ├── │ └── labels │ ├── image.txt │ ├── ├── valid │ ├── images │ │ ├── image.jpg │ │ ├─…

吳恩達deeplearning.ai:模型選擇交叉驗證測試集的訓練方法

以下內容有任何不理解可以翻看我之前的博客哦&#xff1a;吳恩達deeplearning.ai專欄 在上一節中&#xff0c;我們了解了如何利用測試集來評估模型性能。今天我們來進一步完善這個想法&#xff0c;讓你使用該技術自動選擇一個更好的模型。 文章目錄 模型選擇交叉驗證 Cross Va…

SpringBoot 框架(上)

SpringBoot SpringBoot概述依賴管理自動配置SpringBoot 注解使用ConfigurationImport(value {Cat.class,Dog.class})ImportResource(locations "classpath:beans.xml") yaml 標記語言概述基本語法數據類型字面量對象數組 使用細節 Rest 風格請求處理概述注意事項 接…

vue2 開發記錄

el-select 如何修改選擇項的樣式/el-select-dropdown__item 文字上下顯示 測試代碼 <div stylemargin-left: 100px><!-- 測試代碼--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

AVT Prosilica GC Vision Cameras 相機視覺說明使用安裝。具體詳情內容可參看PDF目錄內容。

AVT Prosilica GC Vision Cameras 相機視覺說明使用安裝。具體詳情內容可參看PDF目錄內容。

TikTok矩陣系統功能怎么寫?常用源代碼是什么?

TikTok矩陣系統的功能是如何編寫的?又有哪些常用的源代碼支撐這些功能呢?本文將通過五段源代碼的分享&#xff0c;為大家揭開TikTok矩陣系統的神秘面紗。 一、TikTok矩陣系統的核心功能 TikTok的矩陣系統涵蓋了多個核心功能&#xff0c;包括但不限于用戶管理、內容分發、推…

【接口測試】HTTP協議介紹

目錄 介紹 HTTP狀態碼 HTTP報文 請求方法 HTTP版本 HTTP標頭 通用標頭 請求標頭 響應標頭 get 編碼 post 編碼 RESTful風格 HTTPS 絕大多數的Web服務接口都是基于HTTP協議進行通信的&#xff0c;包括RESTful API和SOAP等。了解HTTP協議可以幫助測試人員理解接口的…

回溯算法題單???

力扣&#xff1a; 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 216. 組合總和 III - 力扣&#xff08;LeetCode&#xff09; LCR 080. 組合 - 力扣&#xff08;LeetCode&#xff09; LCR 082. 組合總和 II - 力扣&#xff08;LeetCode&#xff09; LCR 083. 全排列…

【多線程】CAS詳解

目錄 &#x1f334;什么是 CAS&#x1f338;CAS 偽代碼 &#x1f38d;CAS 是怎么實現的&#x1f340;CAS 有哪些應?&#x1f338;實現原子類&#x1f338;實現自旋鎖 &#x1f333;CAS 的 ABA 問題&#x1f338;**什么是 ABA 問題**&#xff1f;&#x1f338;ABA 問題引來的 B…

【C++】核心編程--函數高級

文章目錄 1. 函數的默認參數2. 函數占位參數3. 函數重載4. 注意事項 1. 函數的默認參數 在C中&#xff0c;函數的形參列表中的形參是可以有默認值的 //語法&#xff1a; 返回值類型 函數名 (參數 默認值){} #include<iostream> using namespace std; //函數默認參數 //如…

異常值檢測-3σ法提交 代碼注釋

背景信息里面都給了相應的答案&#xff0c;但我們可以多了解一下代碼的含義&#xff0c;而不是簡單的復制粘貼 import pandas as pd import matplotlib.pyplot as plt from scipy import stats import numpy as npdata pd.read_csv("src/death.csv", index_colUnna…

ASPICE實操中的那點事兒-如何避免重復性測試

寫在前面 ASPICE理解起來容易&#xff0c;畢竟是有條有理的。但實操起來&#xff0c;尤其是把ASPICE各過程域做全的時候&#xff0c;會遇到各種各樣的問題&#xff08;不是技術問題有多難&#xff0c;而是該如何做選擇&#xff0c;如何既能符合ASPICE要求&#xff0c;保證過程質…

智慧城市建設的新里程碑:公共服務電子支付大屏

隨著科技的飛速發展&#xff0c;我們的生活正在經歷前所未有的變革。電子支付的出現&#xff0c;無疑是這場變革中的一大亮點&#xff0c;它不僅改變了我們日常的支付方式&#xff0c;更成為智慧城市建設的重要一環&#xff0c;為公眾提供了更加便捷、高效的服務體驗。 在以前&…

python SHP2COCO

1. 將shp的標簽數據轉成coco # -*- coding: utf-8 -*- import os, json import cv2 from osgeo import gdal import numpy as np from osgeo import ogr, gdal, osr from shapely.geometry import box, shape from shapely.geometry.polygon import Polygon import collection…