Verilog学习日志(2021.7.4)

2021.7.4

继续HDLbits,今天procedures能做多少做多少。

(28)其实逻辑门和连线的结合就能表示所有数字电路了,但是有了procedures(过程块)之后就可以缩短描述数字电路的时间成本了。

①过程块内部语法和外部是不一样的,其内部会有更加丰富的关键字和语句集。

②在内部模块当中一般不允许连续赋值,可以存在的一般都被放在initial语句当中作为不可综合的成分。

③过程块外部是和其他语句一起并行执行的,而过程块内部是串行执行的。

④对于组合always块,敏感变量列表总是使用(*)。如果把所有的输入都列出来也是可以的,但容易出错的(可能少列出了一个),并且在硬件综合时会忽略您少列了一个,仍按原电路综合。 但仿真器将会按少列一个来仿真,这导致了仿真与硬件不匹配。(在SystemVerilog中,使用always_comb)

//以上这段话我是不理解的

⑤不同于assign语句,过程赋值(always过程块中)的左侧必须是reg类型(变量类型)。这个区别和最终综合的硬件没有关系,没什么差。

(29)用always过程块来描述时序逻辑。存在一个敏感条件(如时钟上升/下降沿)。该过程块在综合时在组合逻辑的输出生成了一组触发器(或寄存器),然后等到满足了敏感条件就可以看到触发器(或寄存器)后面的输出。

总结一下,Verilog中有三种赋值方法:

①连续赋值。//assign x = y;

②过程赋值(阻塞赋值)//x = y;

③过程赋值(非阻塞赋值)//x <= y;

④在组合always语句块中,使用阻塞赋值,在时序always块中,用非阻塞赋值。

(30)在always块里面实现if-else条件语句,条件语句会被综合成MUX。

//用连续赋值也能综合MUX,除了直接使用最小项之和的形式之外,还可以用:

assign out = (condition) ? x : y;

(31)这道题主要讲的是如何避免在综合的时候出现锁存器。

语法正确的代码不一定能综合成我想要的电路,如果在条件语句中没有把所有的可能写出来,Verilog会把剩余的可能的输出保持不变(综合出锁存器)。而锁存器不好,所以不能让以上情况发生。

本题就是把if-else语句中缺的可能性补全了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值