設計背景:
Verilog HDL語言分為面向綜合和面向仿真兩大類語句,且可綜合語句遠少于仿真語句,讀者可能會有可綜合設計相對簡單的感覺。然而事實剛好與此相反,這是因為:首先,可綜合設計是用來構建硬件平臺的,因此對設計的指標要求很高,包括資源、頻率和功耗,這都需要通過代碼來體現;其次,在實際開發中要利用基本Verilog HDL語句完成種類繁多的硬件開發,給設計人員帶來了很大的挑戰。所有的仿真語句只是為了可綜合設計的驗證而存在。為了讓讀者深入地理解可綜合設計、靈活運用已學內容,本章將可綜合設計中的基本知識點和難點提取出來,融入Verilog HDL語法以及開發工具等諸多方面,以深入淺出的方式向讀者說明設計中的難點本質。
設計原理:
本次的設計主要是用來理解組合和時序邏輯的關系和寫法,通過描述組合和時序邏輯電路來仿真出對用的仿真波形,然后來分析其邏輯特點和相應的關系。
設計架構圖:
設計代碼:
組合邏輯設計模塊
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(//設計模塊端口例化
8 .data_1(data_1),
9 .data_2(data_2),
10 .data_out(data_out)
11 );
12
13 initialbegin//描述數據流的變化
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;//系統任務停止
25 end
26
27endmodule
組合邏輯仿真圖:
在仿真波形中可以清楚的看到輸入數據流的變化順序,數據翻轉后,輸出立馬改變沒有延遲。
時序邏輯設計模塊
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(//設計模塊端口例化
8 .clk(clk),
9 .data_1(data_1),
10 .data_2(data_2),
11 .data_out(data_out)
12 );
13
14 initialbegin//描述數據流的變化
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;//系統任務停止
26 end
27
28 always#10clk =~clk;
29
30endmodule
時序邏輯仿真圖:
在仿真中可以清楚的看到,在時序邏輯中,我們或綜合處寄存器,也就是說得到的數據會在寄存器中存一個上升沿,因為用的是上升沿觸發,在波形中一看到。當兩個輸入都為高電平的時候輸出也應該為高電平,可是沒有立馬的變為高電平,要等下一個上升沿來了才能變為高電平。
這樣就直觀的看清楚了組合和時序邏輯綜合出的波形的差距,也就是一個有綜合出是線型,一個是寄存器。
-
FPGA
+關注
關注
1630文章
21781瀏覽量
604936 -
時序邏輯
+關注
關注
0文章
39瀏覽量
9173
發布評論請先 登錄
相關推薦
評論