Verilog学习日志(2021.8.4&2021.8.5)

2021.8.4

1.思考之前的问题。

(96)发现似乎明白了这题的意思了。

①如何实现一个值对out的覆盖,而在这个值改变成低电平的时候out不随着改变(out的初始值是低电平)?正确思路是设置一个中间值,然后整一个判断语句,如果中间值是1的话,就可以写进去,如果是0的话就写不进去。这样就算中间值改变成低电平的时候也不会改变out了。

为什么对于中间值capture的定义是wire变量呢?是不是如果是capture变量的话理论上out变量会再往后移一个CLK(?)

2021.8.5

1.整HDLbits。

(97)设计一个电路用来在时钟的上下边沿触发,用于识别输入信号的上下边沿,然后在半个clk后输出识别信号。

我的思路是分CLK的上升沿和下降沿两种情况,两种情况的设计思路完全一样。设计思路和(96)的类似,只是把reset条件换成输入为下降沿的条件罢了。

定义wire变量pocapture/necapture和作为reg变量的中间值temp1(temp2),定义一个D触发器,然后在输入信号上升沿(下降沿)的时候,D触发器保存的temp1(temp2)值和当前输入信号值对比,如果出现上升沿则pocapture记1,如果出现下降沿则necapture记1。然后再通过一个类似(96)的触发器结构把pocapture(necapture)里面的1“覆盖”到输出q1(q2)当中,再设计一个以CLK信号作为选择端的MUX把q1、q2写到顶层模块的总输出q中,完成整个电路的设计。

//参考答案里面有两种更简单的思路:

①不使用前几道题的D触发器存储中间值temp,然后通过逻辑式识别上下边沿的思路,而是直接把输入信号d通过一个D触发器到输出信号q1/q2,然后同样用MUX把q1q2整合到q里面。

这个思路我有点看不懂...我能理解它的逻辑功能,但是不懂是怎么想出来的这种思路。

还是说这只是为了规避两个always过程块同时给一个变量赋值时的报错?

如果是这么说的话,那这个思路如下:

定义两个reg变量p和n,然后给输出赋值“assign q = p ^ n;”

上升沿时p = d ^ n;下降沿时n = d ^ p。

然后不管是上升沿还是下降沿都可以把d通过D触发器存给输出q,而且可以通过连续赋值来实现随时改变输出的值。

//:在同一个模块中出现两个以上always过程块的时候,要注意不能在不同的过程块里面给同一个变量赋值,不然就会出现报错。

//(97)题我的答案和两种参考答案都是解决这种问题的方法。简单来说就是把被赋值的变量拆开,在不同的always过程块中对不同的变量赋值,然后再整合到一起。

像我和参考答案①都是通过MUX来整合的,而参考答案②是通过异或门来整合的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值