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 )
    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;
    endcase
end
assign 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
`endif

case_endcase_basic case_endcase_basic_instance(
    .data_in ( data_in  ),
    .data_out( data_out )
);

endmodule

使用QuestaSim仿真后,得到的波形图:

DC综合之后效果图:

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

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

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

时间: 2024-10-22 12:07:23

Verilog 几种代码风格的建模效果的相关文章

Bootstrap主要提供了三种代码风格

在Bootstrap主要提供了三种代码风格: 1.使用<code></code>来显示单行内联代码 2.使用<pre></pre>来显示多行块代码 3.使用<kbd></kbd>来显示用户输入代码 预编译版本的Bootstrap将代码的样式单独提取出来: 1.LESS版本,请查阅code.less文件 2.Sass版本,请查阅_code.scss文件 编译出来的CSS代码请查阅bootstrap.css文件第688行~第730行,由于

JavaScript 5种代码风格

1. 过程式程序设计 这种做法很简单,但你无法创建可以保存状态并具有一些仅对其内部状态进行操作的方法 function startAnimation(){} function stopAnimation(){} 2. 定义一个类,封装这种对象,并使用prototype属性将方法添加至该类 var Anim=function(){}; Anim.prototype.start=function(){}; Anim.prototype.stop=function(){}; 3. 将类的定义封装在一条

代码风格

1.使用<code></code>来显示单行内联代码2.使用<pre></pre>来显示多行块代码 <pre>元素一般用于显示大块的代码,并保证原有格式不变.但有时候代码太多,而且不想让其占有太大的页面篇幅,就想控制代码块的大小.Bootstrap也考虑到这一点,你只需要在pre标签上添加类名“.pre-scrollable”,就可以控制代码块区域最大高度为340px,一旦超出这个高度,就会在Y轴出现滚动条.3.使用<kbd><

奇舞js笔记——第2课——代码风格

注: 1.学习视频地址 2.ppt地址 3.个人感想: 是我hin厉害的师父推荐我看的月影大大的视频,感觉对于我这个小白来说,真的是一遍又一遍的刷新知识面.我觉得像月影大大这种大佬的思路,我接触之后真的是受益匪浅. 所以我总结出来不仅是自己记笔记,也是想分享给想要成为真正的前端“工程师”的前端er. 真的很珍惜这种知识面被刷新的感觉——越学习,越感到自己无知,共勉. 目录 1.代码风格存在的意义 2.代码风格是什么 3.遵守怎样的代码风格 4.怎样学习代码风格 5.一些特殊的代码风格:IIFE,

Css的三种常用代码风格

代码格式化的作用:代码更佳美观.容易理解和更好维护. 代码风格一: 主要包括以下特征: 选择符顶行书写. 每条声明单行显示并缩进4空格 规则之间可以适当空行,以便于阅读 属性与属性值之间,以及选择符列表之间建议空一格,使代码显得不至于拥挤. 代码风格二: 主要包括以下特征: 选择符顶行书写. 样式代码单行显示,所有声明都并列在一行内. 规则之间可以适当空行,以便阅读. 属性与属性值之间.声明之间,以及选择符列表之间最好空一格,便于阅读. 代码风格三: 主要包括以下特征: 选择符顶行书写. 当样式

verilog代码风格——PN序列产生代码

在编写Verilog代码时注意以下点: 1 .同一个模块中不同变量的赋值放在不同的always块里(这样可以便于程序的调试),一个always块的代码        尽量不要超过十行. 2.同一个变量的赋值不能放在多个always块中,只能放在同一always块 2.复位信号一定要干净,尽量不要与其他的信号进行逻辑运算 3.利用时钟信号(clk)和复位信号(rst)做触发,尽量避免用中间变量的上升或者下降沿触发 示例代码如下(PN序列的产生): //-----------------------

一种工业级系统交互建模工具的应用--EventStudio System Designer

一种工业级系统交互建模工具的应用 [摘要] 本文以探索如何维护大规模复杂系统交互设计模型为目的,以EventHelix公司的商业付费软件EventStudio System Designer为建模工具,对大规模复杂系统的交互设计进行了应用,认为类ESSD的设计工具能大幅降低系统设计建模的开发和维护复杂度. [关键词] 系统交互建模  建模语言  EventStudio System Designer 一.问题的提出 软件开发人员日常工作中经常需要绘制系统交互流程图,比如顺序图和活动图等,以描述系

转:金庸笔下的良好代码风格

我零九年看过一本小说,讲程序员的故事,从此,了解了一个新物种.最近又看<红楼梦>,史湘云有条谜语:"溪壑分离,红尘游戏,真何趣?名利犹虚,后事终难继."我一想,这不就是程序猿吗? 我学过半年编程,唯一的收获是记住了一个名字叫谭浩强.读了那本小说,我知道还有个东西叫"良好的代码风格",这几个字可比谭浩强有意思多了.可以跨领域应用,比方说,用在写作上. 例如,变量的命名.像本文,如果叫<论良好的代码风格>,姿态就不佳,一个"论"

[转] Linux内核代码风格 CodingStyle [CH]

from:http://blog.csdn.net/jiang_dlut/article/details/8163731 中文版维护者: 张乐 Zhang Le <[email protected]> 中文版翻译者: 张乐 Zhang Le <[email protected]> 中文版校译者: 王聪 Wang Cong <[email protected]>                wheelz <[email protected]>