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究竟是怎么触发的;如果是敏感信号变化才触发的话,按下不放应该是触发一次的啊。
- 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 falling_edge(key) then --检测按下
- if cqi>="1001" then
- cqi<="0000";
- else cqi<=cqi+'1';
- end if;
- end if;
- end process;
我也试过这个程序,这个程序不按都一直触发:
- 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 --CLK不是敏感信号,却能触发process语句吗? if key='1' then --我的是上拉电阻,按下低电平...
- if cqi>="1001" then
- cqi<="0000";
- else cqi<=cqi+'1'; end if;
- end if;
- end if;
- end process;
首先process的触发是:只要敏感变量列表里的任意一个信号发生变化,都触发进程的执行。
关于你时钟强调clk时钟不是敏感变量这一点我很奇怪:
1,我从来没见过clk不是敏感变量的进程;
2,既然clk不是敏感变量,那你在里边添加rising_edge(clk)干嘛?凑格式?
