从RTL视图到Verilog语言-转可乐豆原创

从RTL视图到Verilog语言

曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到极致!”

笔者是多么希望达到这种境界啊~~,可这种境界给笔者的感觉是那么的虚无缥缈。

前段时间笔者写了一篇名叫《关于FPGA(verilog)电平检测模块的易错点分析》的博客。我仔细看了看verilog对应的RTL视图,又将RTL视图与verilog对比,突然间略有感悟。

首先奉上笔者亲手绘制的逻辑图,呵呵~~请原谅它的丑陋。读者能从图直接想象对应出Verilog吗?

图中虚线左边:有一个输入A端口,输入时钟,复位信号和一个D触发器。

图中虚线右边:有两个非门和两个与门,和两个输出端口。

组合逻辑的输出与输入直接相关,时序逻辑的输出和原有状态也有关。

那么左边图就是我们常常所说的时序逻辑,而右边图就是组合逻辑。

先看看右边的视图,看看能不能把它想想成verilog,咦,似乎不难——不就是几个个输入经过几个非门和与门嘛。假设输入就叫F1和F2。

那么对图右边视图的上部分图而言:

wire  neg_edge  =  !F1 & F2;

那么对图右边视图的上部分图而言:

wire  pos_edge  =  F1 & !F2;

再看看左边的时序逻辑视图,我们发现F1和F2时序上是有关系的,F1与D触发器的输入直接相连,而F2与D触发器的输出直接相连。而对于D触发器而言,从输入到输出,从启动沿,到锁存沿。

F1和F2所间隔的正好是一个时钟周期(不考虑物理上的延时)。

好的,F1和F2的关系,我们也发现了。现在试着能不能根据左边的时序逻辑视图,写成Verilog时序逻辑。试试看,似乎也不难。

always @(posedge  CLK)//时序逻辑肯定少不了时钟,对吧~

begin

F1  <=  A;   //F1与输入A端口直接相连

F2  <=  F1;  //F2与F1相隔一个时钟周期

end

最后,我们看看整张图,脑子中想象Verilog代码,结果出现了。

always @(posedge  CLK or negedge RSTn)

if(!RSTn) begin  F1 <= 1’b0 ; F2 <= 1’b0 ; end//加上一个异步复位

else

begin

F1  <=  A;   //F1与输入A端口直接相连

F2  <=  F1;  //F2与F1相隔一个时钟周期

end

wire  neg_edge  =  !F1 & F2;

wire  pos_edge  =  F1 & !F2;

现在给笔者的感觉,就是不需要在死记硬背这个电平检测模块,因为迷迷糊糊,笔者的脑袋里似乎浮现出一幅图,这幅图在指引这笔者如何写这个模块。

其实还有一个更好的记忆方法:

F1 Current State;F2 Previous State,

那么,!F1 & F2 == 1  就必须是之前值是1,现在值是0,那么检测的自然是下降沿。

同理: F1 & !F2 == 1 就必须是之前值是0,现在值是1,那么检测的自然是上升沿。

总结:从看到verilog就能反映出逻辑视图(RTL),笔者感觉很难,这需要大量经验的积累;反之,从看到逻辑视图就能反映出verilog,笔者感觉相对较易。如果我们先从容易的下手,慢慢的积累经验。说不定哪一天也能达到那位大牛所说的境界,哈哈~~

2013-11-12

——宋桓公

时间: 2024-11-05 11:02:04

从RTL视图到Verilog语言-转可乐豆原创的相关文章

Verilog语言

Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,两种HDL均为IEEE标准.Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的. Verilog是由Gateway Design Automation公司的工程师Prabhu Goel和菲尔·莫比(Phil Moorby)发明的.1990年,Gateway设计自动化被Cadence公司收

Verilog语言:还真的是人格分裂的语言

人气腹语术师天愿在现场披露了被人偶搭档夺取灵魂的腹语术师将妻子杀害的表演节目.天愿真的陷入了多重人格,命令自己杀害妻子和子的人偶的人格出现了.为了不(让自己)杀害和弟子登川有外遇的妻子,天愿提出委托想要监视,然而第二天早上,和子真的被杀害的事件发生了.天愿坦白很可能是在自己的意识失去的时候杀害的--"(----"真相只有一个"<名侦探柯南>一向是老衲喜欢的动画片)这个是第806回<腹语師的错觉>的介绍. 人有双重人格,或者叫人格分裂,那么语言呢?Ver

No.3 Verilog 语言要素

3-1 标识符 任意字母.数字.‘$’和’_‘组成,标识符第一个不能是数字. 3-2 注释 (1)/*可扩展多行*/ (2)//本行结束 3-3 系统函数 以$字符开始的标识符. (1)$display("...") //$display系统函数用新的一行字符显示指定的信息 (2)$time //返回当前仿真时间 3-4 编译器指令 (1)‘define和’undef //类似于C语言 (2)‘ifdef.‘ifndef.’else.’elseif.‘endif //条件编译 (3)‘

用Verilog语言实现一个简单的MII模块

项目中要求简单地测试一下基于FPGA的模拟平台的RJ45网口,也就是需要实现一个MII或者RMII模块.看了一下官方网口PHY芯片的官方文档,还是感觉上手有点障碍,想在网络上找些参考代码看看,最后只在opencores找到了一些MAC层控制模块,代码庞大且复杂,对于初学者来说阅读起来很困难. 于是在此以一个初学者的角度记录一下我实现一个简单的MII模块的过程,并且指出一些实现过程中要注意的问题.希望可以帮助有需要的朋友. 为了便于测试,我选择了和我们平台使用相同物理芯片的FPGA开发板NEXYS

FPGA培训专家 V3学院 FPGA专家 带你学习Verilog语言top_down书写技巧

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家 为了提高我们代码的复用率,我们可以将不同的功能的代码分模块书写,然后在顶层连线即可.我们举一个简单的例子,如下程序,我们实现的是LED流水. 我们在led模块中先将系统时钟分频为1HZ的时钟,然后用分频后的时钟控制LED灯的流水,但我的分频和LED灯流水完全不是相同的工程,只是把分频后的时钟作为LED灯的控制时钟.这样我们会发现如果我再次用到流水灯的模块的话需要修改很多地方,那么为了让我们的模块复用率更高.更容易复用,我们

verilog语言实现TCL549(AD)转换

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家 ADC 和 DAC 是模拟量和数字量之间不可或缺的桥梁.A/D 转换器是将各种模拟信号转换为抗干扰性更强的数字信号,直接进入数字计算机进行处理. 本设计采用V3学院基础开发板,采用TCL549进行模数转换,通过数码管显示电压值.TLC549 是一个 8 位的串行模数转换器,I/O所需最大时钟为1.1MHz.A/D 转换时间最大 17us,如图1所示,TCL549引脚图,管脚8和4分别接VCC和GND,管脚1和3分别接基准电

用Verilog语言设计一个3-8译码器

case语句 if_case语句 源代码 // case语句 module decoder38(din,dout); input [2:0] din; output reg[7:0] dout; [email protected](*) begin case(din) 3'b000: dout = 8'h01; 3'b001: dout = 8'h02; 3'b010: dout = 8'h04; 3'b011: dout = 8'h08; 3'b100: dout = 8'h10; 3'b10

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

VHDL与Verilog硬件描述语言TestBench的编写

VHDL与Verilog硬件描述语言在数字电路的设计中使用的非常普遍,无论是哪种语言,仿真都是必不可少的.而且随着设计复杂度的提高,仿真工具的重要性就越来越凸显出来.在一些小的设计中,用TestBench来进行仿真是一个很不错的选择.VHDL与Verilog语言的语法规则不同,它们的TestBench的具体写法也不同,但是应包含的基本结构大体相似,在VHDL的仿真文件中应包含以下几点:实体和结构体声明.信号声明.顶层设计实例化.提供激励:Verilog的仿真文件应包括:模块声明.信号声明.顶层设