在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4508|回复: 6

[求助] VHDL的process语句

[复制链接]
发表于 2015-6-5 14:53:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 BYbread 于 2015-6-5 15:41 编辑

process(XXX) is .........里面的敏感信号是怎么触发的.?如下:architecture art of cnt10 is

signal cqi:std_logic_vector(3 downto 0);

begin

process (clr,key) is

begin

if clr='0'
then cqi<="0000" ;    --清零

elsif rising_edge(clk)
then

elsif  (key='0')
then

if cqi>="1001"
then

cqi<="0000";

else  cqi<=cqi+'1';

end if;

end if;

end if;

end if;

end process;

本意是想让按键key控制+1的,如果敏感信号只是变化的时候触发process的话,应该是:按下按键不放,只触发一次process,然后松开按键也触发一次。但是现在是按下不放,就会一直触发process...为什么??注意:CLK不是敏感信号....
发表于 2015-6-5 15:46:19 | 显示全部楼层
我只能说你完全不懂process,建议先看看语法再写
 楼主| 发表于 2015-6-5 16:12:21 | 显示全部楼层
那能说说怎么写?
 楼主| 发表于 2015-6-5 16:18:44 | 显示全部楼层
回复 2# xduryan

那能说说怎么写?
发表于 2015-6-5 17:25:13 | 显示全部楼层
回复 4# BYbread

带异步复位的时序process的格式如下:   process(rst,clk)
   begin
      if rst = '1' then
      elsif rising_edge(clk) then
      end if;
   end process;


感觉你写的太乱了,让人改都没法改。
首先,哪有clk不放进敏感信号表的;
其次,哪有 elsif rising_edge(clk) then后边还跟一个elsif的;
最后,不知道你想表达的是组合逻辑还是时序逻辑;
还有,如果你觉得一个进程表达不清楚,你就分开,不要揉在一起。
 楼主| 发表于 2015-6-5 18:38:38 | 显示全部楼层
回复 5# xduryan

如果按你这样写的话,只要按下不放,同样是会不断触发process...我要的效果是按下不放也只触发一次..我就改成这样子...现在我只是想问,process究竟是怎么触发的;如果是敏感信号变化才触发的话,按下不放应该是触发一次的啊。




  1. architecture art of cnt10 is
  2.         signal cqi:std_logic_vector(3 downto 0);
  3.         begin
  4.         process (clr,key) is
  5.         begin
  6.         if clr='0'        then cqi<="0000" ;
  7.                         elsif falling_edge(key)        then     --检测按下
  8.                                 if cqi>="1001"        then
  9.                                         cqi<="0000";
  10.                                 else  cqi<=cqi+'1';
  11.                         end if;
  12.         end if;
  13.         end process;


复制代码





我也试过这个程序,这个程序不按都一直触发:




  1. architecture art of cnt10 is
  2.         signal cqi:std_logic_vector(3 downto 0);
  3.         begin
  4.         process (clr,key) is
  5.         begin
  6.         if clr='0'        then cqi<="0000" ;
  7. elsif rising_edge(clk) then       --CLK不是敏感信号,却能触发process语句吗?    if key='1' then                         --我的是上拉电阻,按下低电平...
  8.        if cqi>="1001"        then
  9.        cqi<="0000";
  10.     else  cqi<=cqi+'1';        end if;
  11.     end if;
  12.                         end if;

  13.         end process;


复制代码
发表于 2015-6-5 23:03:59 | 显示全部楼层
首先process的触发是:只要敏感变量列表里的任意一个信号发生变化,都触发进程的执行。

   关于你时钟强调clk时钟不是敏感变量这一点我很奇怪:
   1,我从来没见过clk不是敏感变量的进程;
   2,既然clk不是敏感变量,那你在里边添加rising_edge(clk)干嘛?凑格式?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-29 15:00 , Processed in 0.022844 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表