首页 > 代码库 > Verilog 几种代码风格的建模效果

Verilog 几种代码风格的建模效果

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 )    3h0: data_out_reg = 8b0000_0001;      3h1: data_out_reg = 8b0000_0010;    3h2: data_out_reg = 8b0000_0100;    3h3: data_out_reg = 8b0000_1000;    3h4: data_out_reg = 8b0001_0000;    3h5: data_out_reg = 8b0010_0000;    3h6: data_out_reg = 8b0100_0000;    3h7: data_out_reg = 8b1000_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仿真后,得到的波形图:

case_endcase_basic

DC综合之后效果图:

image

使用 综合后的网标文件和sdf文件进行后仿真,波形图如下:

case_endcase_basic_post

可以看出在信号稳定的时候,综合后的仿真效果和综合前的是一样的。而对于两个不同输入值之前出现的“0”值,可以判断是cell的1->0 比0->1的传播速度要快。