您的位置:首页 > 其它

数字逻辑verilog

2020-02-29 22:36 106 查看

数字逻辑verilog
Q:什么是可综合的电路
A:可综合的意思是说所编写的代码可以对应成具体的电路,
不可综合就是所写代码没有对应的电路结构

例如行为级语法就是一种不可综合的代码,通常用于写仿真测试文件。

建立可综合模型时,需注意以下几点:

不使用initial
不使用#10之类的延时语句
不使用循环次数不确定的循环语句,如forever,while等

不使用用户自定义原语(UDP元件)
尽量使用同步方式设计电路
用always块来描述组合逻辑时,应列出所有输入信号作为敏感信号列表,即always@(*)

所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,尽量使用器件的全局复位端作为系统的总复位

对时序逻辑描述和建模,尽量使用非阻塞赋值的方式,对组合逻辑描述和建模,虽然阻塞和非阻塞赋值的方式都可以,但在同一过程快中最好不要同时使用阻塞赋值和非阻塞赋值。我个人比较推荐用阻塞赋值的方式描述组合逻辑

不能在多个always块中对同一个变量进行赋值。对同一个对象不能既使用非阻塞赋值,又使用阻塞赋值

如果不打算让变量生成锁存器,那么必须在使用if语句或case语句时补全所有条件

不可综合语句:

initial 初始化语句,只能在testbench中使用,不可综合

event event在同步testbench时更有用,不能综合

real 不支持real数据类型的综合

time 不支持time数据类型的综合

assign 和 deassign 不支持对reg数据类型赋值的综合,但支持wire 类型赋值的综合

以#开头的延时语句不能被综合

verilog是一种硬件描述语言,我们在写verilog 代码时,首先要有所要写的module在硬件上如何实现的概念,而不是去想编译器如何解释这个module。比如在决定是否使用 reg 定义时,要问问自己物理上是不是真正存在这个 register, 如果是,它的clock 是什么? D 端是什么?Q 端是什么?有没有清零和置位?同步还是异步?再比如上面讨论的三态输出问题,首先想到的应该是在 register 的输出后面加一个三态门,而不是如何才能让编译器知道要“赋值”给一个信号为三态。同样,Verilog 中没有“编译”的概念,而只有综合的概念,我们只有综合工具,而没有所谓的编译器。

当然,并不是说不可综合的代码就不重要了,在IC设计中,有70%的时间都是用来做验证,所以说仿真验证的工作对于FPGA的设计同样重要。(感谢度娘,就留着方便自己看可以的吧?)
///////////////////////////////
Q:三态控制电路
A:就相当于增加一个使能端,有三种状态,0,1,高阻
计算机中的记忆元件由触发器组成,而触发器只有两个状态。即“0”态和“1”态,所以每条信号线上只能传送一个触发器的信息。如果要在一条信号线上连接多个触发器,而每个触发器可以根据需要与信号线连通或断开,当连通时可以传送“0”或“1”,断开时对信号线上的信息不产生影响,就需要一个特殊的电路加以控制,此电路即为三态输出电路,又称为三态门。
///////////////////////////////
Q:组合逻辑和时序逻辑
A:
组合逻辑:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关。当前电路输入信号任何一个发生改变,输出都将发生改变。
时序逻辑:输出不仅是当前输入电平的函数,还与目前电路的状态有关。
///////////////////////////////

  • 点赞
  • 收藏
  • 分享
  • 文章举报
WHYHYY. 发布了1 篇原创文章 · 获赞 0 · 访问量 12 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: