微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL的process语句

VHDL的process语句

时间:10-02 整理:3721RD 点击:

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不是敏感信号....

我只能说你完全不懂process,建议先看看语法再写

那能说说怎么写?


那能说说怎么写?


带异步复位的时序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的;
最后,不知道你想表达的是组合逻辑还是时序逻辑;
还有,如果你觉得一个进程表达不清楚,你就分开,不要揉在一起。


如果按你这样写的话,只要按下不放,同样是会不断触发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;

复制代码

首先process的触发是:只要敏感变量列表里的任意一个信号发生变化,都触发进程的执行。
   关于你时钟强调clk时钟不是敏感变量这一点我很奇怪:
   1,我从来没见过clk不是敏感变量的进程;
   2,既然clk不是敏感变量,那你在里边添加rising_edge(clk)干嘛?凑格式?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top