標籤:style blog http color 使用 os strong 檔案
Verilog畢竟是硬體描述語言,使用Verilog這類HDL語言的目的始終是對電路的建模,並最終得到工具轉換出來的實際電路,所以寫代碼的過程中要能抽象出對應的電路。
但同時,Verilog畢竟還是一種程式語言,就像其他程式語言一樣,所以仍然需要熟悉它的文法特性,這樣才可以在遇到不熟悉的代碼風格時候,能抽象出相應電路或者找出建模過程中出錯的地方。
本文關注於常見代碼風格的建模效果以及綜合是否改變模擬結果。
---
系統內容:Centos 6.5
測試載入器:Questasim 10.1b
綜合工具:DC 2013.03(針對ASIC)
波形工具:Verdi 2013
----
case 1.解碼器
以3-8解碼器作為例子來看case的建模效果。代碼和tb分別如下:
// 3-8 decoder
module case_endcase_basic( input [2:0] data_in, output [7:0] data_out);reg [7:0] data_out_reg;always @ (*) begin case( data_in ) 3‘h0: data_out_reg = 8‘b0000_0001; 3‘h1: data_out_reg = 8‘b0000_0010; 3‘h2: data_out_reg = 8‘b0000_0100; 3‘h3: data_out_reg = 8‘b0000_1000; 3‘h4: data_out_reg = 8‘b0001_0000; 3‘h5: data_out_reg = 8‘b0010_0000; 3‘h6: data_out_reg = 8‘b0100_0000; 3‘h7: data_out_reg = 8‘b1000_0000; endcaseendassign data_out = data_out_reg;endmodule
// 3-8 decoder testbench
module case_endcase_basic_tb;reg [2:0] data_in;wire [7:0] data_out;initial begin data_in = 0; #10 data_in = 1; #10 data_in = 2; #10 data_in = 3; #10 data_in = 4; #10 data_in = 5; #10 data_in = 6; #10 data_in = 7; #10 data_in = 8; #10 $finish;end`ifdef DUMP_FSDB initial begin $fsdbDumpfile("test.fsdb"); $fsdbDumpvars; end`endifcase_endcase_basic case_endcase_basic_instance( .data_in ( data_in ), .data_out( data_out ));endmodule
使用QuestaSim模擬後,得到的波形圖:
DC綜合之後:
使用 綜合後的網標檔案和sdf檔案進行後模擬,波形圖如下:
可以看出在訊號穩定的時候,綜合後的模擬效果和綜合前的是一樣的。而對於兩個不同輸入值之前出現的“0”值,可以判斷是cell的1->0 比0->1的傳播速度要快。