Verilog过程赋值语句提问
说的是,本想采用触发器的方式,
设计一个延时来使得dreg的输出比areg慢3个时钟节拍,
但是结果是dreg的输出只比areg慢一个时钟节拍输出
程序和逻辑电路图,在下图给出
在分析中(如上图),既然已经说了,是顺序执行,
那么每天语句执行时间为一个时钟周期,
三个语句执行完不就是延时3个周期了吗?
即使后一句的右边是前一句更新后的结果,
到程序执行完时,dreg还是变成了areg
这样不就是延时3个时钟周期了吗?为什么不是这样呢?
另外,
阻塞型赋值语句,规定是,顺序执行语句,每种状态一个接一个执行,
非阻塞型赋值语句,规定是,并行赋值语句,当执行语句时同事计算右边的表达式,
而不会立刻把值赋给左边的变量,过一段时间才会赋值
那在下图中,是把第一个例子中的功能用非阻塞语句实现了
这里说的过一段时间,是指的是CLK信号来到时,才会赋值到左边吗?如果可以把阻塞和非阻塞赋值语句简单化的讲解一下就更好了,谢!
都忘了。
我用小脚丫官网仿真了一下,没什么问题啊。
阻塞式赋值特点就是在一个块语句中一旦执行完成当前的赋值语句,赋值目标变量即刻获得等号右边的表达式的值。
非阻塞赋值特点就是块语句执行结束时才能整体完成赋值。
always@(posedge clk)就是来了上升沿,就执行下面的块语句,里面是非阻塞赋值,全部计算完了才一次性赋值给等号左边。
针对第一个问题:从理论上将,阻塞赋值语句与其后面的语句只有概念上的先后,而无实质上的延迟。因此,一个时钟周期内,三条语句就执行完了;而如果使用非阻塞赋值,第一个clk,breg变为areg,第二个clk,creg变为areg,第三个clk,dreg变为areg,三个时钟周期完成。针对第二个问题:
1、无论是阻塞赋值还是非阻塞赋值,都不能决定并行或顺序执行,在verilog中,能够决定语句顺序执行的是begin....end,决定语句并行执行的是fork....join。
2、科普一下两种赋值的区别:
a)阻塞赋值之所以称为阻塞赋值,是因为它在执行时,不允许任何别的语句干扰(同一个always块中),直到它完成赋值后(即将右侧值赋给左侧),才允许别的赋值语句执行。
b)非阻塞赋值则相反,它在执行时,其他语句也可执行,只不过右侧表达式计算完成之后,不会传递给左侧,而是等到赋值语句所在的块结束后,才传递给左侧。
先谢谢解答,有个追问
还是在第一个例子中,
无论有多少条阻塞语句进行赋值,
比如除了areg breg creg dreg 外
还有ereg freg 等等
把之前的程序写成
ereg=dreg
freg=ereg
等等
只要在一个周期内,
最终的寄存器都是延时一个周期后才得到areg的值?
准确的说,当clk的上升沿出现时,freg就等于areg了,其中涉及到的延时只是硬件上的延时。 平面变压器厂家 | 平面电感厂家
[开关电源]关于tl494的问题,学生来求助如上图所示,我给2脚多少的电压,那么这个电路最大能输出多少的电流。 比如输入0.5v,那么最大能输出0.5A的电流,最后的vout我定的是8V。 但是,如果后面的负载使得最大的输出电流大于0.5A,老师说就是会变成恒流源,但是我的这个不行,当输出大于0.5A的时候,直接就会影响前面供电的电源。 电源不停地啪啪啪的响。 真心没能发现问题,求大家来
基于浮地电源的高输出电压-电流转换电路在恒流输出电路中,如负载电阻增大,使IO.R产生的电压超过电源电压,电路就不能在恒状态下工作。本电路采用浮地的正负15V和+250V电源,可以获得大于200V的负载电压。电路工作原理输入电压E1N为0
一体成型电感主要特征说明
一体成型贴片电感外观:
一体成型电感外观如上图所示
一体成型电感结构特点:电感线圈与磁芯构成绕组,混入合金粉一体浇铸成型。绕绕线头连在外接的金属电极上。密闭