[FPGA] 每当 dis_data有变化就产生一个 高脉冲该怎么写啊

[复制链接]
1028|6
 楼主| 28182900 发表于 2016-8-21 19:08 | 显示全部楼层 |阅读模式
每当  dis_data有变化就产生一个 高脉冲该怎么写啊
我知道我这个写的是不对的,只是做个示范
always @(dis_data)
begin
        start <= 1'b0;
        start <= 1'b1;
        start <= 1'b0;
end


assign start = (dis data1 != dis_data)?1'b1:1'b0;这个也是不行的,因为脉冲宽度不可控。
 楼主| 28182900 发表于 2016-8-21 20:50 | 显示全部楼层

我是采集输入信号的变化,最好用组合逻辑实现
wx85105157 发表于 2016-8-22 09:17 来自手机 | 显示全部楼层
用不可优化的非门对dis_data延迟以下。然后把延迟后的同向信号与原来的信号异或下。如果脉冲宽度要大的话比较浪费资源。
玄德 发表于 2016-8-22 10:35 | 显示全部楼层

不明白想达到什么目的,也看不懂这些代码,
有点莫名其妙。

(dis data1 != dis_data),这条件也能成立?

hqbenson 发表于 2016-8-22 19:07 | 显示全部楼层
楼主您要判别dis_data是否有变化,言下之意就是要判断接下来的dis_data的值与当前值是否不同,那肯定就是时序电路了,肯定要用到寄存器了。
可以将dis_data值用寄存器存一拍,然后输出与输入用一个异或进行判断即可。一个可能可行的代码:
always@(posedge clk)
  dis_data_sav<=dis_data;
assign judge=dis_data^dis_data_sav;
assign pulse=judge&(!clk);
注意时钟要取的恰当,高脉冲宽度取决于时钟频率。不过可能不太可靠就是了,随手写的。。。。

评论

不行啊这样有延迟啊,能不能用组合逻辑给我写一个啊  发表于 2016-8-22 22:30
hqbenson 发表于 2016-8-24 12:07 | 显示全部楼层
如果非要用组合逻辑那只能用偶数个非门打一下延迟后输出再与原信号异或一下了:
(*sythesis,keep*)wire not1,not2,not3,not4;
assign not1=~dis_data;
assign not2=~not1;
assign not3=~not2;
assign not4=~not3;
assign pulse=dis_data^not4;
脉冲宽度取决于非门个数和走线延迟,不过也只有几个ns。你输出的信号要是想要给后面的电路捕捉的话那会很不好使,而且宽度要大的话是会消耗大量资源的。所以是建议用个寄存器更好更灵活。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

1127

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部