中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

一個(gè)主機(jī)可以建設(shè)多少個(gè)網(wǎng)站seo推廣培訓(xùn)資料

一個(gè)主機(jī)可以建設(shè)多少個(gè)網(wǎng)站,seo推廣培訓(xùn)資料,手機(jī)網(wǎng)站技術(shù)方案,做水利網(wǎng)站需要多少錢實(shí)例:點(diǎn)燈學(xué)習(xí) 一、Verilog語法學(xué)習(xí) 1. 參考文章 剛接觸Verilog,作為一個(gè)硬件小白,只能嘗試著去理解,文章未完…持續(xù)更新。 參考博客文章: Verilog語言入門學(xué)習(xí)(1)Verilog語法【Verilog】一文…

實(shí)例:點(diǎn)燈學(xué)習(xí)
image.png

一、Verilog語法學(xué)習(xí)

1. 參考文章

剛接觸Verilog,作為一個(gè)硬件小白,只能嘗試著去理解,文章未完…持續(xù)更新。

參考博客文章:

  • Verilog語言入門學(xué)習(xí)(1)
  • Verilog語法
  • Verilog】一文帶你了解Verilog基礎(chǔ)語法 - 子墨祭的文章 - 知乎
  • 關(guān)于Verilog中的幾種賦值語句

這里抄點(diǎn),那里扣點(diǎn),整理了一下,感謝以上各位作者。具體的實(shí)例項(xiàng)目是同事給的,他讓我學(xué)著編出個(gè)流水燈,這不要我的命嘛,慢慢學(xué)吧。

你還可以在哪里看到這篇文章:

  • 知乎

2. Verilog模塊

Verilog的基本設(shè)計(jì)單元是“模塊”。一個(gè)模塊是由兩部分組成的,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。下面舉例說明:

image.png

可以看到模塊由關(guān)鍵字module....endmodule 確定。

module 模塊名(接口信號(hào));

? //信號(hào)聲明

? //功能描述

endmodule

要求: 1. 模塊名具有意義;2. 一個(gè).v文件只有一個(gè)模塊。

3. Verilog語法

Verilog是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。

VerilogC的區(qū)別:

  • Verilog是硬件描述語言,編譯下載到FPGA之后,會(huì)生成電路,所以Verilog全部是并行處理與運(yùn)行的
  • C語言是軟件語言,編譯下載到單片機(jī)CPU之后,還是軟件指令,而不會(huì)根據(jù)代碼生成相應(yīng)的硬件電路,而單片機(jī)CPU處理軟件指令需要取址、譯碼、執(zhí)行,是串行執(zhí)行的。

**可綜合描述:**綜合tool能夠Verilog描述轉(zhuǎn)化(complie)成基本的數(shù)字電路底層cell(與或非gate,寄存器等)的描述。

assign y = a & b;

**不可綜合描述:**綜合tool不能把Verilog描述轉(zhuǎn)換為基本的數(shù)字電路底層cell的描述。

$display("hello word.\n")

Verilog設(shè)計(jì)仿真與實(shí)現(xiàn):通過EDA TOOL,可以在計(jì)算機(jī)上對(duì)Verilog設(shè)計(jì)的功能進(jìn)行仿真。

數(shù)字電路設(shè)計(jì)方法學(xué):

  • Bottom-Up:從底層cell開始,逐漸往上加功能;
  • top-Down:從底層結(jié)構(gòu),協(xié)議算法開始,向下逐步劃分功能模塊;再細(xì)分各功能模塊與IO。

目前,基于Verilog的數(shù)字電路通常使用TOP-Down的設(shè)計(jì)方法。因?yàn)閿?shù)字IP/IC的規(guī)模很大,需要先抽象思維再細(xì)化;

Verilog給數(shù)字電路的設(shè)計(jì)的抽象思維提供了一種設(shè)計(jì)語言,但是:數(shù)字設(shè)計(jì)和軟件設(shè)計(jì)不同的,需要Think in Hardware,寫代碼前先設(shè)計(jì)電路結(jié)構(gòu)。Verilog的功能描述:

Top-Dowan描述數(shù)字電路功能:通過模塊module的層次化設(shè)計(jì),實(shí)現(xiàn)一個(gè)復(fù)雜的數(shù)字邏輯功能image.png

Verilog邏輯值:

邏輯電路中有四種值,即四種狀態(tài):

  • 邏輯0:表示低電平,對(duì)應(yīng)電路的GND
  • 邏輯1:表示高電平,對(duì)應(yīng)電路的VCC
  • 邏輯X:表示未知,有可能是高電平,也有可能是低電平;
  • 邏輯Z:表示高組態(tài),外部沒有激勵(lì)信號(hào)是一個(gè)懸空狀態(tài);

image.png

Verilog的數(shù)字進(jìn)制
Verilog數(shù)字進(jìn)制格式包括二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制,一般常用的為二進(jìn)制、十進(jìn)制和十六進(jìn)制。

  • 二進(jìn)制表示如下:4'b0101表示4位二進(jìn)制數(shù)字0101
  • 十進(jìn)制表示如下:4'd2表示4位十進(jìn)制數(shù)字2
  • 十六進(jìn)制表示如下:4'ha表示4位十六進(jìn)制數(shù)字a

當(dāng)沒有指定數(shù)字的位寬與進(jìn)制時(shí),默認(rèn)為32位的十進(jìn)制,比如100,實(shí)際上表示的值為32'd100

4. Verilog語法詳細(xì)介紹

(1)標(biāo)識(shí)符:

用于定義code中的各種名字,比如:信號(hào),moduledefineparameter

  • 標(biāo)識(shí)符由:字符,數(shù)字,下劃線組成;
  • 首字母必須是字母或者下劃線;
  • 標(biāo)識(shí)符是區(qū)分大小寫的;
  • 信號(hào)名字與信號(hào)功能相對(duì)應(yīng);

不建議大小寫混合使用,普通內(nèi)部信號(hào)建議全部小寫,參數(shù)定義建議大寫

  1. 用有意義的有效的名字如sumcpu_addr
  2. 用下劃線區(qū)分詞語組合,如cpu_addr
  3. 采用一些前綴或后綴
    1. 比如:時(shí)鐘采用clk前綴:clk_50m,clk_cpu;低電平采用_n后綴:enable_n
  4. 統(tǒng)一縮寫,如全局復(fù)位信號(hào)rst
  5. 同一信號(hào)在不同層次保持一致,如同一時(shí)鐘信號(hào)必須在各模塊保持一致。
  6. 自定義的標(biāo)識(shí)符不能與保留字(關(guān)鍵字)同名
  7. 參數(shù)統(tǒng)一采用大寫,如定義參數(shù)使用SIZE

(2)關(guān)鍵字

優(yōu)先記錄常用關(guān)鍵字:

關(guān)鍵字含義
module模塊開始定義
input輸入端口定義
output輸出端口定義
inout雙向端口定義
parameter信號(hào)的參數(shù)定義
wirewire信號(hào)定義
regreg信號(hào)定義
always產(chǎn)生reg信號(hào)語句的關(guān)鍵字
assign產(chǎn)生wire信號(hào)語句的關(guān)鍵字
begin語句的起始標(biāo)志
end語句的結(jié)束標(biāo)志
posedge、negedge時(shí)序電路的標(biāo)志
caseCase語句起始標(biāo)記
defaultCase語句的默認(rèn)分支標(biāo)志
endcaseCase語句結(jié)束標(biāo)志
ifif/else語句標(biāo)志
elseif/else語句標(biāo)記
forfor語句標(biāo)記
endmodule模塊結(jié)束定義

(3)注釋:

  • 注釋一行:以//開始,到行末;

  • 注釋多行:以/*開始,到*/為止的所有內(nèi)容;

(4)數(shù)據(jù)類型:

主要有三大類數(shù)據(jù)類型,

  • 寄存器類型;
  • 線網(wǎng)類型;
  • 參數(shù)類型;

線性數(shù)據(jù):用于連續(xù)賦值語句(assign)描述組合邏輯或者module間的信號(hào)連接線;

1) 寄存器類型

寄存器類型表示一個(gè)抽象的數(shù)據(jù)存儲(chǔ)單元,它只能在always語句和initial語句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值過程中被保存下來。

如果語句描述的是時(shí)序邏輯,即always語句帶有時(shí)鐘信號(hào),則該寄存器變量對(duì)應(yīng)為寄存器;如果該過程語句描述的是組合邏輯,即always語句不帶有時(shí)鐘信號(hào)則該寄存器變量對(duì)應(yīng)為硬件連線

寄存器類型的缺省值是x(未知狀態(tài))。

寄存器數(shù)據(jù)類型有很多種,如reg、integer、real等,其中最常用的就是reg類型

reg [31:0] delay_cnt; // 延時(shí)計(jì)數(shù)器
reg key_flag; // 按鍵標(biāo)志wire [3:0] din;
reg [3:0] d0; //4bit
reg d1;//1bit
initial begin //過程賦值語句d1 = 0;#10;d1 = 1;
end
always(posedge clk)begin //clk端一般就是寄存器if(d1) d0 <= din;
end

2)線網(wǎng)類型

線網(wǎng)表示Verilog結(jié)構(gòu)化元件間的物理連線。

值由驅(qū)動(dòng)元件的值決定,例如連續(xù)賦值或門的輸出。

如果沒有驅(qū)動(dòng)元件連接到線網(wǎng),線網(wǎng)的缺省值為z(高阻態(tài))。

線網(wǎng)類型,如triwire等,其中最常用的就是wire類型,它的使用方法如下:

wire data_en; //數(shù)據(jù)使能信號(hào)
wire [7:0] data;//數(shù)據(jù)wire a;//1bit位寬
wire [3:0] b; //4bit
wire [7:0] c;//8bit
assign a = 1'b0;//連續(xù)賦值語句
assign c = 8'h5a;//8bit的十六進(jìn)制數(shù)
//tri0、tri1:帶下拉、上拉電阻的特性,沒有驅(qū)動(dòng)時(shí),會(huì)由默認(rèn)的值為0/1,一般綜合代碼不用
tri0 s0;
tri1 [20:0] s1;

3)參數(shù)類型

參數(shù)其實(shí)就是一個(gè)常量,常被用于定義狀態(tài)機(jī)的狀態(tài)、數(shù)據(jù)位寬和延遲大小

可以在編譯時(shí)修改參數(shù)的值,因此又常被用于一些參數(shù)可調(diào)的模塊中,使用戶在實(shí)例化模塊時(shí),可以根據(jù)需要配置參數(shù)。

在定義參數(shù)時(shí),可以一次定義多個(gè)+參數(shù),參數(shù)與參數(shù)之間需要用逗號(hào)隔開。

要注意的是參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。

parameter DATA_WIDTH = 8;//數(shù)據(jù)位寬為8

(5)Verilog運(yùn)算符

1)算術(shù)運(yùn)算符

+
-
*
/
%

Verilog實(shí)現(xiàn)乘除比較浪費(fèi)組合邏輯資源,尤其是除法。一般2的指數(shù)次冪的乘除法使用移位運(yùn)算來完成運(yùn)算.

非2的指數(shù)次冪的乘除法一般是調(diào)用現(xiàn)成的IPQUARTUS/ISE等工具軟件會(huì)有提供,不過這些工具軟件提供的IP也是由最底層的組合邏輯(與或非門等)搭建而成的。

2)關(guān)系運(yùn)算符

>
<
>=
<=
==
!=

用來進(jìn)行條件判斷,在進(jìn)行關(guān)系運(yùn)算符時(shí),如果聲明的關(guān)系是假的,則返回值是0,如果聲明的關(guān)系是真的,則返回值是1;

所有的關(guān)系運(yùn)算符有著相同的優(yōu)先級(jí)別,關(guān)系運(yùn)算符的優(yōu)先級(jí)別低于算術(shù)運(yùn)算符的優(yōu)先級(jí)別。

3)邏輯運(yùn)算符

!
&&
||

連接多個(gè)關(guān)系表達(dá)式,可實(shí)現(xiàn)更加復(fù)雜的判斷,一般不單獨(dú)使用,都需要配合具體語句來實(shí)現(xiàn)完整意思。

4)條件運(yùn)算符

?
:

從兩個(gè)輸入中選擇一個(gè)作為輸出的條件選擇結(jié)構(gòu),功能等同于always中的if-else語句。

5)位運(yùn)算符

~
&
|
^

直接對(duì)應(yīng)數(shù)字邏輯中的與、或、非門等邏輯門

位運(yùn)算符一般用在信號(hào)賦值上。

6)移位運(yùn)算符

<<
>>

移位運(yùn)算符包括左移位運(yùn)算符和右移位運(yùn)算符,這兩種移位運(yùn)算符都用0來填補(bǔ)移出的空位。

一般使用左移位運(yùn)算代替乘法,右移位運(yùn)算代替除法,但是只能表示2的指數(shù)次冪的乘除法。

7)拼接運(yùn)算符

{a,b}

可以把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來進(jìn)行運(yùn)算操作

image.png

5. 阻塞賦值(Blocking)和非阻塞賦值(Non-Blocking)

(1)阻塞賦值

在一個(gè)always塊中,后面的語句會(huì)受到前語句的影響,具體來說,在同一個(gè)always中,一條阻塞賦值語句如果沒有執(zhí)行結(jié)束,那么該語句后面的語句就不能被執(zhí)行,即被“阻塞”。

也就是說always塊內(nèi)的語句是一種順序關(guān)系

符號(hào)“=”用于阻塞的賦值(如:b=a;),阻塞賦值“=”在begin和end之間的語句是順序執(zhí)行,屬于串行語句。其后面的賦值語句從概念上來講是在前面一條語句賦值完成之后才執(zhí)行的。

(2)非阻塞賦值

符號(hào)"<="用于非阻塞賦值(如:b<=a;),非阻塞賦值是由時(shí)鐘節(jié)拍決定,在時(shí)鐘上升到來時(shí),執(zhí)行賦值語句右邊,然后將begin-end之間的所有賦值語句同時(shí)賦值到賦值語句的左邊。

begin-end之間的所有語句,一起執(zhí)行,且是個(gè)時(shí)鐘只執(zhí)行一次,屬于并行執(zhí)行語句。

非阻塞賦值的操作過程可以看作兩個(gè)步驟:

  • 賦值開始的時(shí)候,計(jì)算RHS(等號(hào)右邊的表達(dá)式);
  • 賦值結(jié)束的時(shí)候,更新LHS(等號(hào)左邊的表達(dá)式)。

非阻塞的概念是指,在計(jì)算非阻塞賦值的RHS以及LHS期間,允許其他的非阻塞賦值語句同時(shí)計(jì)算RHS和更新LHS。

6. assign和always的區(qū)別

  • assign語句使用時(shí)不能帶時(shí)鐘;
  • always語句可以帶時(shí)鐘,也可以不帶時(shí)鐘;
  • always不帶時(shí)鐘是,邏輯功能和assign完全一致,都是只產(chǎn)生組合邏輯。
  • 比較簡單的組合邏輯推薦使用assign語句,比較復(fù)雜的組合邏輯推薦使用always語句。

(1)帶時(shí)鐘和不帶時(shí)鐘的always

always語句可以帶時(shí)鐘,也可以不帶時(shí)鐘。

  • always不帶時(shí)鐘時(shí),邏輯功能和assign完全一致,雖然產(chǎn)生的信號(hào)定義為reg類型,但是該語句產(chǎn)生的還是組合邏輯;
  • always帶時(shí)鐘信號(hào)時(shí),這個(gè)邏輯語句才能產(chǎn)生真正的寄存器。

(2)latch

latch指鎖存器,是一種對(duì)脈沖點(diǎn)平敏感的存儲(chǔ)單元電路

鎖存器和寄存器都是基本存儲(chǔ)單元,鎖存器是電平觸發(fā)的存儲(chǔ)器,寄存器是邊沿觸發(fā)的存儲(chǔ)器。

兩者的基本功能是一樣的,都可以存儲(chǔ)數(shù)據(jù)。

鎖存器是組合邏輯產(chǎn)生的,而寄存器是在時(shí)序電路中使用,由時(shí)鐘觸發(fā)產(chǎn)生的。

latch的主要危害是產(chǎn)生毛刺(glitch),這種毛刺對(duì)一級(jí)電路是很危險(xiǎn)的。并且其隱蔽性很強(qiáng),不易查出。

在設(shè)計(jì)中,應(yīng)盡量避免latch的使用。

代碼里出現(xiàn)latch的兩個(gè)原因是在組合邏輯中,if或者case語句不完整的描述,比如if缺少else分支,case缺少default分支,導(dǎo)致代碼在綜合過程中出現(xiàn)了latch。解決辦法就是if必須帶else分支,case必須帶default分支。

只有不帶時(shí)鐘的always語句if語句或者case語句不完整才會(huì)產(chǎn)生latch,帶時(shí)鐘的語句if或者case語句不完整描述不會(huì)產(chǎn)生latch

7. 狀態(tài)機(jī)

Verilog是硬件描述語言,硬件電路是并行執(zhí)行的,當(dāng)需要按照流程或者步驟來完成某個(gè)功能是,代碼中通常會(huì)使用很多個(gè)if嵌套語句來實(shí)現(xiàn),這樣就增加了代碼的復(fù)雜度,以及降低了代碼的可讀性,這個(gè)時(shí)候就可以使用狀態(tài)機(jī)來編寫代碼。

狀態(tài)機(jī)相當(dāng)于一個(gè)控制器,它將一項(xiàng)功能的完成分解為若干步,每一步對(duì)應(yīng)二進(jìn)制的一個(gè)狀態(tài),通過預(yù)先設(shè)計(jì)的順序在各狀態(tài)之間進(jìn)行轉(zhuǎn)換,狀態(tài)轉(zhuǎn)換的過程就是實(shí)現(xiàn)邏輯功能的過程。

狀態(tài)機(jī),全程是有限狀態(tài)機(jī)(Finite State Machine,縮寫為FSM),是一種在有限狀態(tài)之間按一定規(guī)律轉(zhuǎn)換的時(shí)序電路,可以認(rèn)為是組合邏輯和時(shí)序邏輯的一種組合。狀態(tài)機(jī)通過控制各個(gè)狀態(tài)的跳轉(zhuǎn)來控制流程,使得整個(gè)代碼看上去更加清晰易懂,在控制復(fù)雜流程的時(shí)候,狀態(tài)機(jī)優(yōu)勢(shì)明顯,因此基本上都會(huì)用到狀態(tài)機(jī),如SDRAM控制器等。

根據(jù)狀態(tài)機(jī)的輸出是否與輸入條件相關(guān),可將狀態(tài)機(jī)分為兩大類,即摩爾(Moore)狀態(tài)機(jī)和米勒(Mealy)型狀態(tài)機(jī)

  • Mealy狀態(tài)機(jī):組合邏輯的輸出不僅取決于當(dāng)前狀態(tài),還取決于輸入狀態(tài)

image.png

  • Moore狀態(tài)機(jī):組合邏輯的輸出只取決于當(dāng)前狀態(tài)

image.png

(1)三段式狀態(tài)機(jī)

根據(jù)狀態(tài)機(jī)的實(shí)際寫法,狀態(tài)機(jī)還可以分為一段式、和二段式和三段式狀態(tài)機(jī)。

  • 一段式:整個(gè)狀態(tài)機(jī)寫到一個(gè)always模塊里面,在該模塊中即描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入和輸出。

不推薦,一般都會(huì)要求把組合邏輯和時(shí)序邏輯分開,組合邏輯和時(shí)序邏輯混合在一起不利于代碼維護(hù)和修改

  • 二段式:用兩個(gè)always模塊來描述狀態(tài)機(jī),其中一個(gè)always模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移;另一個(gè)模塊采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律以及輸出,需要定義兩個(gè)狀態(tài),現(xiàn)態(tài)和次態(tài),然后通過現(xiàn)態(tài)和次態(tài)的轉(zhuǎn)換來實(shí)現(xiàn)時(shí)序邏輯。
  • 三段式:在兩個(gè)always模塊描述方法基礎(chǔ)上,使用三個(gè)always模塊,一個(gè)always模塊采用同步時(shí)序描述狀態(tài)轉(zhuǎn)移,一個(gè)always采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律,另一個(gè)always模塊描述狀態(tài)輸出(可以用組合電路輸出,也可以時(shí)序電路輸出)。
    • 三段式狀態(tài)機(jī)的基本格式是:
      • 第一個(gè)always語句實(shí)現(xiàn)同步狀態(tài)跳轉(zhuǎn);
      • 第二個(gè)always語句采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件;
      • 第三個(gè)always語句描述狀態(tài)輸出(可以用組合電路輸出,也可以時(shí)序電路輸出)。

8. 模塊化設(shè)計(jì)

劃分模塊的基本原則是子模塊功能相對(duì)獨(dú)立、模塊內(nèi)部聯(lián)系盡量緊密、模塊間的連接盡量簡單。

在進(jìn)行模塊化設(shè)計(jì)中,對(duì)于復(fù)雜的數(shù)字系統(tǒng),我們一般采用自頂向下的設(shè)計(jì)方式??梢园严到y(tǒng)劃分成幾個(gè)功能模塊,每個(gè)功能模塊再劃分成下一層的子模塊;每個(gè)模塊的設(shè)計(jì)對(duì)應(yīng)一個(gè)module,一個(gè)module設(shè)計(jì)成一個(gè)Verilog程序文件。因此,對(duì)一個(gè)系統(tǒng)的頂層模塊,我們采用結(jié)構(gòu)化的設(shè)計(jì),即頂層模塊分別調(diào)用了各個(gè)功能模塊。

image.png

FPGA邏輯設(shè)計(jì)中通常是一個(gè)大的模塊中包含了一個(gè)或多個(gè)功能子模塊,Verilog通過模塊調(diào)用或稱為模塊實(shí)例化的方式來實(shí)現(xiàn)這些子模塊與高層模塊的連接,有利于簡化每一個(gè)模塊的代碼,易于維護(hù)和修改。

如果子模塊內(nèi)部使用parameter定義了一些參數(shù),Verilog也支持對(duì)參數(shù)的例化(也叫參數(shù)的傳遞),即頂層模塊可以通過例化參數(shù)來修改子模塊內(nèi)定義的參數(shù)。

子模塊名是指被例化模塊的模塊名,而例化模塊名相當(dāng)于標(biāo)識(shí),當(dāng)例化多個(gè)相同模塊時(shí),可以通過例化名來識(shí)別哪一個(gè)例化,一般命名為“u_”+“子模塊名”

參數(shù)的例化,參數(shù)的例化是在模塊例化的基礎(chǔ)上,增加了對(duì)參數(shù)的信號(hào)定義

// 例子
time_count #(.MAX_NUM (TIME_SHOW)    // 參數(shù)例化
)u_time_count(.clk (sys_clk),.rst_n (sys_rst_n),     // 信號(hào)例化.flag (add_flag)
);

9. Verilog的編程規(guī)范

工程的組織形式一般包括如下幾個(gè)部分,分別是doc、par、rtlsim四個(gè)部分

  • doc:一般存放工程相關(guān)的文檔,包括該項(xiàng)目用到的datasheet(數(shù)據(jù)手冊(cè))、設(shè)計(jì)方案等。
  • par:主要存放工程文件和使用到的一些IP文件
  • rtl:主要存放工程的rtl代碼,是工程的核心,文件名與module名稱應(yīng)當(dāng)一致,建議按照模塊的層次分開存放
  • sim:主要存放工程的仿真代碼,復(fù)雜的工程里面,仿真也是不可或缺的部分,可以極大減少調(diào)試的工作量。

(1)文件頭聲明

每一個(gè)Verilog文件的開頭,都必須有一段聲明的文字。包含文件的版權(quán)、作者、創(chuàng)建日期,以及內(nèi)容簡介等等

//*************************************Copyright(c)*******************//
// FileName:
// Last modified Date:
// Last Version:
// Descriptions: 
//*******************************************************************//

(2)輸入輸出定義

module led(input   sys_clk,     // 系統(tǒng)時(shí)鐘input   sys_rst_n ,  // 系統(tǒng)復(fù)位output reg [3:0] led // 4位LED燈
);
  • 一行只定義一個(gè)信號(hào)
  • 信號(hào)全部對(duì)齊
  • 同一組的信號(hào)放在一起

(3)parameter定義

  • module中的parameter聲明,不建議隨處亂放,將parameter定義放在緊跟著module的輸入輸出定義之后
  • parameter等常量命名全部使用大寫

(4)wire/reg定義

一個(gè)module中的wire/reg變量聲明需要集中放在一起,不建議隨處亂放

  • regwire的定義放在緊跟著parameter之后
  • 建議具有相同功能的信號(hào)集中放在一起
  • 信號(hào)需要對(duì)齊,reg和位寬需要空2格,位寬和信號(hào)名字至少空四格
  • 位寬使用降序描述,[6:0]
  • 時(shí)鐘使用前綴clk,復(fù)位使用后綴rst
  • 一行只定義一個(gè)信號(hào)

(5)信號(hào)命名

  • 內(nèi)部信號(hào)不要使用大寫,也不要使用大小寫混合,建議全部使用小寫
  • 模塊名字使用小寫
  • 異步信號(hào),使用_a作為信號(hào)后綴

(6)always塊

  • 一個(gè)always需要配一個(gè)beginend
  • always前面需要有注釋
  • 一個(gè)always和下一個(gè)always空一行即可,不要空多行
  • 時(shí)序邏輯使用非阻塞賦值

(7)assign塊

  • assign的邏輯不能太復(fù)雜,否則易讀性不好
  • assign前面需要有注釋
  • 組合邏輯使用阻塞賦值

(8)空格 和 TAB

  • 由于不同的解釋器對(duì)于TAB翻譯不一致,所以建議不使用TAB,全部使用空格

二、環(huán)境Lattice Dimond環(huán)境的搭建

  • Lattice的官網(wǎng)下載Dimond,下一步下一步安裝;

  • 獲取電腦的MAC地址,注意是有線網(wǎng)卡的MAC地址,不能是無線的;

  • 在官網(wǎng)申請(qǐng)免費(fèi)的證書,這里有問題,官網(wǎng)不會(huì)跳出來,所以是請(qǐng)同事幫忙生成的;

  • 打開軟件添加證書文件,即可。

  • Lattice官網(wǎng)鏈接

  • 證書申請(qǐng)網(wǎng)址

(有的會(huì)跳出來什么聯(lián)系管理員,我這里是把IP改為馬來西亞打開網(wǎng)址的)

image-20230506135525601

填寫物理網(wǎng)卡MAC地址質(zhì)料:

image-20230506135617995

新建工程項(xiàng)目:

image.png

image.png

選擇芯片,我的板子上的芯片是:image.png

生成項(xiàng)目文件夾:

image.png

添加Verilog文件;
image.png

image.png

這樣就可以編寫Verilog代碼了。

三、點(diǎn)燈實(shí)例分析

同事給出的一段實(shí)例,能夠點(diǎn)亮兩個(gè)燈;

實(shí)例環(huán)境硬件如下:

  • 電腦
  • 可調(diào)電源

image-20230506140226687

module clk_div
( 
in_clk,
clk_8hz,
clk_1hz,
pg_rstn
);input	in_clk; 
output	clk_8hz;
output	clk_1hz;
input	pg_rstn; reg [4:0] count0_r;
reg [8:0] count1_r;
reg [9:0] count2_r;reg       div0_clk;
reg       div1_clk;
reg       div2_clk;wire	  clk_1hz;
wire	  clk_8hz;assign	clk_1hz		=	count2_r[9];
assign	clk_8hz		=	count2_r[6];always @(posedge in_clk or negedge pg_rstn)	//25M--1M
beginif (!pg_rstn)begindiv0_clk<= 1'b1;count0_r	<= 5'b0;	endelse if (count0_r==5'b11001)begindiv0_clk<=1'b1;		count0_r<=5'b0;end elsebegincount0_r<=count0_r+1'b1;div0_clk<= 1'b0;	end
endalways @(posedge div0_clk or negedge pg_rstn)	//1M--1k
beginif (!pg_rstn)begincount1_r	<= 9'b0;div1_clk	<= 1'b0;endelse if (count1_r==9'h1ff)begindiv1_clk<=~div1_clk;		count1_r<=9'h0;endelsecount1_r<=count1_r+1'b1;
endalways @(posedge div1_clk or negedge pg_rstn)	//1k--1Hz
beginif (!pg_rstn)begincount2_r	<= 10'b0;endelse if (count2_r==10'h3ff)begin		        count2_r <= 10'b0;                        endelsebegincount2_r <= count2_r+1'b1;end
endOSCH #("10.23") osc_int (.STDBY(1'b0),.OSC(clk_i),.SEDSTDBY());endmodule

1. 實(shí)例代碼分析

module clk_div
( 
in_clk,
clk_8hz,
clk_1hz,
pg_rstn
);
input	in_clk; 
output	clk_8hz;
output	clk_1hz;
input	pg_rstn;    
....
endmodule

這一段是接口定義,定義了兩個(gè)輸出信號(hào)clk_8hz、clk_1hz,代表兩個(gè)燈不同的頻率。兩個(gè)輸入信號(hào)in_clk、pg_rstn指芯片的時(shí)鐘和復(fù)位。

模塊由關(guān)鍵字module....endmodule 確定。

clk_div模塊名

image-20230506142132091

reg [4:0] count0_r;//5bit
reg [8:0] count1_r;//9bit
reg [9:0] count2_r;//10bit

reg定義寄存器,寄存器數(shù)據(jù)類型有很多種,如reg、integer、real等,其中最常用的就是reg類型。

reg div0_clk;
reg div1_clk;
reg div2_clk;

默認(rèn)位寬是1。

image-20230506143616054

wire	  clk_1hz;
wire	  clk_8hz;

wire定義的是線網(wǎng),線網(wǎng)指的是Verilog結(jié)構(gòu)化元件間的物理連線

assign	clk_1hz		=	count2_r[9];
assign	clk_8hz		=	count2_r[6];
  • assign產(chǎn)生wire信號(hào)語句的關(guān)鍵字,連續(xù)賦值語句assign

  • 比較簡單的組合邏輯推薦使用assign語句,比較復(fù)雜的組合邏輯推薦使用always語句。

  • reg與wire的區(qū)別詳細(xì)

always @(posedge in_clk or negedge pg_rstn)	//25M--1M
beginif (!pg_rstn)begindiv0_clk<= 1'b1;//一位二進(jìn)制數(shù)1count0_r	<= 5'b0;//五位二進(jìn)制數(shù)0endelse if (count0_r==5'b11001)//五位二進(jìn)制數(shù)11001begindiv0_clk<=1'b1;count0_r<=5'b0;end 
  • 時(shí)序邏輯 ,帶異步復(fù)位 ;

  • posedge是上升沿,電平從低到高跳變

  • negedge是下降沿,電平從高到低跳變

  • 參考文章

文章持續(xù)更新,由于剛接觸,所以很多東西也分析不錯(cuò)來,之后慢慢補(bǔ)充。

2. 編譯運(yùn)行

  1. 編譯代碼

image-20230506153249044

image-20230506153333075

  1. 生成JED文件

image-20230506153400419

  1. 引腳設(shè)置

image-20230506153443864

  1. 找到項(xiàng)目中的.jed文件

image-20230506154229607

  1. 設(shè)備上電,插上燒錄器插上電腦。點(diǎn)擊燒錄

image-20230506154315720

  1. 等待

image-20230506154324639

  1. 完成

image-20230506154405479

四、總結(jié)

這東西對(duì)于像我這樣跨專業(yè)的初學(xué)者來說真難,慢慢學(xué)吧,之后會(huì)找有關(guān)書或者視頻,更新Verilog語言的基礎(chǔ)學(xué)習(xí)筆記。

http://www.risenshineclean.com/news/64029.html

相關(guān)文章:

  • 網(wǎng)站做代理服務(wù)器網(wǎng)站制作培訓(xùn)
  • 品牌網(wǎng)站分析關(guān)鍵詞在線聽
  • 做網(wǎng)站需要做什么頁面媒體網(wǎng)絡(luò)推廣價(jià)格優(yōu)惠
  • 怎么樣開網(wǎng)站淘寶店鋪怎么推廣
  • 成都網(wǎng)站建設(shè)易維達(dá)好互聯(lián)網(wǎng)營銷的特點(diǎn)
  • 做公司網(wǎng)站注意事項(xiàng)網(wǎng)站推廣優(yōu)化平臺(tái)
  • 怎么按照屏幕比例做網(wǎng)站適應(yīng)安裝百度一下
  • 網(wǎng)頁靠什么賺錢南京seo網(wǎng)絡(luò)優(yōu)化公司
  • 用dw做網(wǎng)站結(jié)構(gòu)圖域名查詢 站長查詢
  • 個(gè)人可以做商城網(wǎng)站嗎優(yōu)秀品牌策劃方案
  • 手機(jī)網(wǎng)站做指向推廣教程
  • 建設(shè)黨史網(wǎng)站的意義在線智能識(shí)圖
  • 比價(jià)網(wǎng)站源碼整站程序百度上做優(yōu)化
  • h5可以做網(wǎng)站么免費(fèi)推廣途徑
  • 中小企業(yè)服務(wù)平臺(tái)企業(yè)seo外包公司
  • 公司網(wǎng)站建設(shè)服務(wù)大數(shù)據(jù)獲客系統(tǒng)
  • 萊蕪公司做網(wǎng)站外鏈相冊(cè)
  • wordpress 添加 聯(lián)系我們網(wǎng)站優(yōu)化方案
  • 建設(shè)外貿(mào)商城網(wǎng)站制作怎樣在百度上發(fā)布廣告
  • 有贊做網(wǎng)站360推廣
  • 東莞做網(wǎng)站一年費(fèi)用網(wǎng)站優(yōu)化seo培
  • 網(wǎng)站跳出率一般多少公司網(wǎng)站設(shè)計(jì)公司
  • 網(wǎng)站建設(shè)的合同書愛站小工具計(jì)算器
  • iis網(wǎng)站asp.net部署投放廣告找什么平臺(tái)
  • 登錄功能網(wǎng)站怎么做的搜索引擎優(yōu)化是什么意思啊
  • 網(wǎng)站自適應(yīng)手機(jī)怎么一鍵生成網(wǎng)頁
  • 重慶疫情最新消息今天seo在線論壇
  • 深圳橫崗做網(wǎng)站的推廣網(wǎng)上國網(wǎng)
  • wordpress更改網(wǎng)站url無法訪問軟文推廣營銷服務(wù)平臺(tái)
  • 建行網(wǎng)站會(huì)員重慶seo團(tuán)隊(duì)