2021.7.31
1.结合王红大大和我之前的考研笔记,重新很快地过一遍数电里面触发器和时序逻辑的内容。
2.初步尝试HDLbits里面的时序逻辑题。
(80)设计一个最简单的上升沿D触发器。
//注:使用always过程块进行时序逻辑的描述时,
上升沿为:
always @ ( posedge clk );
下降沿为:
always @ ( negedge clk );
(81)设计一个处理8位数据的上升沿D触发器。
(82)在(81)的基础上加一个高电平有效的同步复位信号。
考虑以下两种代码:
//上面这种代码把赋值语句放在reset信号的前面,虽然从实际功能的角度是行得通的,但是看起来有点奇怪...感觉reset信号应该是优先级最高的信号才对...而且没有考虑到所有可能性,所以会综合出锁存器。
//这种代码看起来就舒服多了,而且条件语句里面每种可能性都有考虑到,完美地避开了综合出锁存器这一结果。
//问:在if-else语句中,如果出现“else;”这样的句子,会不会综合出锁存器?
(83)在(81)的基础上,如果reset信号为1,则对q进行赋值。
(84)之前的reset信号都是同步信号,这里变成异步信号。
//注:
①若always引导句里有两个以上触发条件时,要注意是“与”关系还是“或”关系。
“与”关系就用关键字“and”,或关系就用关键字“or”。
②其实同步和异步的区别无非就是触发敏感度(优先级)的区别。异步复位信号即使clk未满足上升沿/下降沿的要求,只要激活,马上生效。所以可以把它写在always语句块的引导句里。
③always @ ( posedge clk or posedge reset );
这就是一个典型的带异步复位信号的时序电路。
(85)用一个二位信号来控制16位D触发器中的前后8位是否保持。
//我用了一种比较行为级的代码风格:case语句来对byte_enable变量进行判断。
(86)设计一个D锁存器:ena使能的状态下,q始终等于d。
//在正规的逻辑电路当中,锁存器的综合和实现会消耗大量的资源,故会出现warning,慎用。
(87)设计一个带异步复位的上升沿D触发器。
(88)设计一个带同步复位的上升沿D触发器。
3.明天争取把HDL bits里面Latch and Flip-Flop的小节做完。