搜索
bottom↓
回复: 17

请大家帮忙看看如下时序如何用VHDL实现

[复制链接]

出0入0汤圆

发表于 2014-4-4 09:34:49 | 显示全部楼层 |阅读模式
我想完成一个如下时序输出:
pulse_A脉冲会使 OUT 输出高电平,
pulse_B脉冲会使 OUT 输出低电平。

编写VHDL时遇到如下困难:
  pulse_A和pulse_B的 上升沿检测,不能在一个进程中。
如果分两个进程检测信号上升沿,又会遇到在两个进程中对同一个信号赋值的问题。

请问大神们,如何完成我需要的时序哪?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2014-4-4 09:37:42 | 显示全部楼层
奉上一点点莫元了表心意,谢谢了。

出0入0汤圆

发表于 2014-4-4 09:39:25 | 显示全部楼层
有时钟信号吗?

出0入0汤圆

 楼主| 发表于 2014-4-4 09:47:19 来自手机 | 显示全部楼层
有时钟信号

出0入17汤圆

发表于 2014-4-4 09:49:59 | 显示全部楼层
应该系统还有个高频的时钟信号吧?
用时钟信号的上升沿,检测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

出0入0汤圆

 楼主| 发表于 2014-4-4 09:55:38 来自手机 | 显示全部楼层
回楼上,如果pulse_A的宽度是一个时钟周期,是不是就不行了?您给了我新的思路,谢谢,我加宽脉冲宽度试试

出0入54汤圆

发表于 2014-4-4 10:03:35 | 显示全部楼层
根据out的状态,当out为0时检测到a为1时out也为1
out为1时检测到b为1时变为0

出0入0汤圆

 楼主| 发表于 2014-4-4 10:16:33 来自手机 | 显示全部楼层
谢谢楼上新思路,我会找时间依依测试。

出0入0汤圆

 楼主| 发表于 2014-4-4 10:18:37 来自手机 | 显示全部楼层
看来用脉冲的上升沿来解决问题的思路是行不通的了

出0入0汤圆

发表于 2014-4-4 10:51:07 | 显示全部楼层
不就是带复位的触发器吗

出0入0汤圆

 楼主| 发表于 2014-4-4 11:05:46 来自手机 | 显示全部楼层
谢谢楼上回复,请您详细解释一下,本人新手。

出0入0汤圆

发表于 2014-4-4 11:33:35 | 显示全部楼层
利用鉴相的方法来 如图示,适用于低速脉冲,如果速度较快,需要约束时序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-4-4 12:45:07 | 显示全部楼层
谢谢楼上回复,我有时间试试能不能写出您给的vhdl代码

出0入0汤圆

发表于 2014-4-4 13:34:16 | 显示全部楼层
类似RS触发器么~~~~~~~~

出0入0汤圆

发表于 2014-4-4 13:55:40 | 显示全部楼层
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

出0入0汤圆

 楼主| 发表于 2014-4-4 14:33:17 来自手机 | 显示全部楼层
谢谢楼上回复,我找时间仔细看看。

出0入0汤圆

发表于 2014-4-4 09:34:50 | 显示全部楼层
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

出0入0汤圆

 楼主| 发表于 2014-4-4 15:54:22 | 显示全部楼层
本帖最后由 chp019479 于 2014-4-4 15:58 编辑

感谢  linjpxt 回复,已经按照您的例子完美实现我的要求,谢谢!

结帖。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表