設(shè)計背景:
Verilog HDL語言分為面向綜合和面向仿真兩大類語句,且可綜合語句遠(yuǎn)少于仿真語句,讀者可能會有可綜合設(shè)計相對簡單的感覺。然而事實剛好與此相反,這是因為:首先,可綜合設(shè)計是用來構(gòu)建硬件平臺的,因此對設(shè)計的指標(biāo)要求很高,包括資源、頻率和功耗,這都需要通過代碼來體現(xiàn);其次,在實際開發(fā)中要利用基本Verilog HDL語句完成種類繁多的硬件開發(fā),給設(shè)計人員帶來了很大的挑戰(zhàn)。所有的仿真語句只是為了可綜合設(shè)計的驗證而存在。為了讓讀者深入地理解可綜合設(shè)計、靈活運用已學(xué)內(nèi)容,本章將可綜合設(shè)計中的基本知識點和難點提取出來,融入Verilog HDL語法以及開發(fā)工具等諸多方面,以深入淺出的方式向讀者說明設(shè)計中的難點本質(zhì)。
設(shè)計原理:
本次的設(shè)計主要是用來理解組合和時序邏輯的關(guān)系和寫法,通過描述組合和時序邏輯電路來仿真出對用的仿真波形,然后來分析其邏輯特點和相應(yīng)的關(guān)系。
設(shè)計架構(gòu)圖:
設(shè)計代碼:
組合邏輯設(shè)計模塊
0modulestudy(data_1,data_2,data_out);//端口列表
1
2 inputdata_1,data_2;//輸入
3 outputregdata_out;//輸出
4
5 //描述一個組合邏輯電路
6 always@(*)
7 begin
8 data_out =data_1 &&data_2;//與邏輯
9 end
10
11endmodule
測試模塊
0`timescale1ns/1ps
1
2moduletb;
3
4 regdata_1,data_2;//定義輸入寄存器
5 wiredata_out;//定義輸出線型
6
7 study study_dut(//設(shè)計模塊端口例化
8 .data_1(data_1),
9 .data_2(data_2),
10 .data_out(data_out)
11 );
12
13 initialbegin//描述數(shù)據(jù)流的變化
14 data_1 =0;data_2 =0;
15 #200
16 data_1 =1;data_2 =0;
17 #200
18 data_1 =0;data_2 =1;
19 #200
20 data_1 =1;data_2 =1;
21 #200
22 data_1 =0;data_2 =0;
23 #200
24 $stop;//系統(tǒng)任務(wù)停止
25 end
26
27endmodule
組合邏輯仿真圖:
在仿真波形中可以清楚的看到輸入數(shù)據(jù)流的變化順序,數(shù)據(jù)翻轉(zhuǎn)后,輸出立馬改變沒有延遲。
時序邏輯設(shè)計模塊
0modulestudy(clk,data_1,data_2,data_out);//端口列表
1
2 inputclk,data_1,data_2;//輸入
3 outputregdata_out; //輸出
4
5 //描述一個組合邏輯電路
6 always@(posedgeclk)
7 begin
8 data_out <=data_1 &&data_2;//與邏輯
9 end
10
11endmodule
測試模塊
0`timescale1ns/1ps
1
2moduletb;
3
4 regclk,data_1,data_2;//定義輸入寄存器
5 wiredata_out;//定義輸出線型
6
7 study study_dut(//設(shè)計模塊端口例化
8 .clk(clk),
9 .data_1(data_1),
10 .data_2(data_2),
11 .data_out(data_out)
12 );
13
14 initialbegin//描述數(shù)據(jù)流的變化
15 clk =1;data_1 =0;data_2 =0;
16 #200.1
17 data_1 =1;data_2 =0;
18 #200.1
19 data_1 =0;data_2 =1;
20 #200.1
21 data_1 =1;data_2 =1;
22 #200.1
23 data_1 =0;data_2 =0;
24 #200
25 $stop;//系統(tǒng)任務(wù)停止
26 end
27
28 always#10clk =~clk;
29
30endmodule
時序邏輯仿真圖:
在仿真中可以清楚的看到,在時序邏輯中,我們或綜合處寄存器,也就是說得到的數(shù)據(jù)會在寄存器中存一個上升沿,因為用的是上升沿觸發(fā),在波形中一看到。當(dāng)兩個輸入都為高電平的時候輸出也應(yīng)該為高電平,可是沒有立馬的變?yōu)楦唠娖?,要等下一個上升沿來了才能變?yōu)楦唠娖健?/span>
這樣就直觀的看清楚了組合和時序邏輯綜合出的波形的差距,也就是一個有綜合出是線型,一個是寄存器。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21628瀏覽量
601252 -
時序邏輯
+關(guān)注
關(guān)注
0文章
39瀏覽量
9134
發(fā)布評論請先 登錄
相關(guān)推薦
評論