请大家帮忙看看如下时序如何用VHDL实现
我想完成一个如下时序输出:pulse_A脉冲会使 OUT 输出高电平,
pulse_B脉冲会使 OUT 输出低电平。
编写VHDL时遇到如下困难:
pulse_A和pulse_B的 上升沿检测,不能在一个进程中。
如果分两个进程检测信号上升沿,又会遇到在两个进程中对同一个信号赋值的问题。
请问大神们,如何完成我需要的时序哪? 奉上一点点莫元了表心意,谢谢了。 有时钟信号吗? 有时钟信号 应该系统还有个高频的时钟信号吧?
用时钟信号的上升沿,检测PULSE_A和PULSE_B的状态的变化。
定义一个替代变量TMP_PULSE_A,每次时钟信号上升沿来临的时候,先比较当前PULSE_A和上一次存储的TMP_PULSE_A的状态,如果PULSE_A = 1&&TMP_PULSE_A = 0,那么OUT就赋值为1.
同理对PULSE_B也一样处理。
最后TMP_PULSE_A = PULSE_A,TMP_PULSE_B = PULSE_B 回楼上,如果pulse_A的宽度是一个时钟周期,是不是就不行了?您给了我新的思路,谢谢,我加宽脉冲宽度试试 根据out的状态,当out为0时检测到a为1时out也为1
out为1时检测到b为1时变为0 谢谢楼上新思路,我会找时间依依测试。 看来用脉冲的上升沿来解决问题的思路是行不通的了 不就是带复位的触发器吗 谢谢楼上回复,请您详细解释一下,本人新手。 利用鉴相的方法来 如图示,适用于低速脉冲,如果速度较快,需要约束时序 谢谢楼上回复,我有时间试试能不能写出您给的vhdl代码 类似RS触发器么~~~~~~~~ signal pa_dl, pb_dl, pa_re, pb_re, dout : std_logic;
process(clk)
begin
if clk'event and clk='1' then
pa_dl <= pa;
pb_dl <= pb;
end if;
end process;
pb_re <= (not pb_dl) and pb;
pa_re <= (not pa_dl) and pa;
process(clk)
begin
if clk'event and clk='1' then
if pa_re = '1' then
dout <= 1;
elsif pb_re <= '1' then
dout <= 0;
else
dout <= dout;
end if;
end if;
end process;
有一个系统时钟延时
如果同时上升沿out输出1 谢谢楼上回复,我找时间仔细看看。 module sync_sign
(
input clk_in,reset_i,
input aset,clr,
output q
);
reg a_flag,b_flag;
always @ (posedge aset or posedge reset_i)
if(reset_i)
begin
a_flag=0;
end
else
begin
a_flag=~b_flag;
end
always @ (posedge clr or posedge reset_i)
if(reset_i)
begin
b_flag=0;
end
else
begin
if(clr) b_flag=a_flag;
end
assign q=(a_flag!=b_flag);
endmodule 本帖最后由 chp019479 于 2014-4-4 15:58 编辑
感谢linjpxt 回复,已经按照您的例子完美实现我的要求,谢谢!
结帖。{:biggrin:}{:biggrin:}
页:
[1]