触发问题!@后电平触发还是边沿触发。
always @(reset or c1)
...
我是想在c1变化的时候触发这个进程,可是reset不能用posedge reset,只能被综合为电平触发。但是c1却是一个边沿触发,上升延和下降延都可以。怎么办?
写成这样
always @(posedge reset or posedge c1 or negedge c1)
又不能同时检验上升延和下降延:(
如果reset是电平触发没什么,可是我还有一个信号一定要边沿触发,在这里应该怎么处理?
[求助]触发问题!@后电平触发还是边沿触发。
直接按硬件结构来想吧,要么综合成纯组合电路,要么综合成带清零端的触发器。看看怎么能符合你的要求。
[求助]触发问题!@后电平触发还是边沿触发。
从硬件结构来看,我所希望的是一个带清零的寄存器,平时和wire输入的波形相同,但是当一个异步脉冲出现的时候,这个寄存器就从另一个寄存器取数。
也就是这样,o1为输出,m1为一有数据的寄存器,c1是一个输入。run==1时,o1从c1取数,run==0时,如果select这个脉冲到了,就把m1的数据送到o1上,这应该是一个数据选择器吧!
reg o1;
reg m1;
wire c1;
always @(c1)
if (run)
o1<=c1;
always @(posedge select)
if (!run)
o1<=m1;
现在要把这两个进程和起来,不知道应该怎么写了:( 否则综合不能通过。我想用数码管显示o1的输出。所以不能分成两个output:(
[求助]触发问题!@后电平触发还是边沿触发。
对于ASIC设计来说,应该是个全同步的设计较好,所以那个异步脉冲应该通过时钟来采样,酱子就可以用1个典型的MUX+DFF结构来实现了。对你的要求有两个疑问,1是是不是异步脉冲select很小(小于1个时钟脉冲,也就是同步设计中的glitch)都要改变输出?2是当run==0且select==0时输出是保持还是c1的值?代码如下:
assign o1_pre = (run) ? c1 : ((select) ? m1 : o1);(按保持写的)
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
begin
o1<=1'b0;
end
else
begin
o1<=o1_pre;
end
end
[求助]触发问题!@后电平触发还是边沿触发。
思路基本上和 iamchine 论坛小编一样,但更能符合小编要求。
always @(posedge clk or negedge reset_n)
if (~reset_n) begin
o1<= 1'b0;
c1_reg<= 1'b0;
end else begin
c1_reg<= c1;
if (c1_reg != c1)
o1<=
end
[求助]触发问题!@后电平触发还是边沿触发。
[这个贴子最后由brotherjam在 2004/06/17 10:48pm 第 1 次编辑]
谢谢楼上的各位帮助,我现在对同步设计时的各种突发信号的解决方法不是很清楚,所以就会用异步电路实现。后来想想还是同步电路比较好!:)
谢谢各位
用一个高频的的clk检验脉冲应该怎么做呢?看有的书上介绍说是比如10ms保持不变就是脉冲,可是这个10ms怎么实现呢?
[求助]触发问题!@后电平触发还是边沿触发。
多长时间的脉冲检测由你具体的应用而定,不是说10ms就包打天下的。实现这个时间自然是利用高频clk的计数器来完成。
[求助]触发问题!@后电平触发还是边沿触发。
同步清零寄存器是通不过仿真的,所以还是要用异步的.程序如下,我们一直用的就是这.
assign reset_n = ~reset;
always @(posedge clk or posedge reset_n)
if (reset_n)
reg_out<= 1'b0;
else
reg_out<= d_in;
这是带异步清零的寄存器.
[求助]触发问题!@后电平触发还是边沿触发。
.
楼上的同学,能否解释下同步清零寄存器为何通不过仿真?[我是真的没有这个概念,别的高手也可以帮忙解释]
另:
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
reg_out<= 1'b0;
else
reg_out<= d_in;
end//本就是个低电平异步清零(复位)寄存器。
always @(posedge clk )
begin
if(!reset_s)
reg_out<= 1'b0;
else
reg_out<= d_in;
end//这个才是个低电平同步清零(复位)寄存器。