关于EDA VHDL语言的IF语句解释,,求大虾

use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity miao is
port(clk:in std_logic;
reset: in std_logic;
co:out std_logic;
q1,q0: out std_logic_vector(3 downto 0));

end;
architecture one of miao is
signal cnt1,cnt0 :std_logic_vector(3 downto 0);
signal a : std_logic;
begin
process(clk)
begin
if clk'event and clk = '1' then
if reset = '1' then
cnt0 <= "0000";cnt1 <= "0000";
elsif cnt0 = "1001" then
cnt0 <= "0000";
else cnt0 <= cnt0 + 1;
if cnt1 = "0101" then
cnt1 <= "0000" ;
else cnt1 <= cnt1 +1;
if cnt0 = "1001"and cnt1 = "0101"then
a <= '1'; else a<='0';
end if;
end if;
end if;
end if;
end process;
q1<=cnt1;
q0<=cnt0;
co<=a;
end architecture one;
这个语句的进程部分IF语句是如何实现秒分进位的呢,,if和if之间有什么包含关系

cnt0是秒位,cnt1是分位,
if clk'event and clk = '1' then
if reset = '1' then
cnt0 <= "0000";cnt1 <= "0000";//当信号触发时或收到复位信号时(reset是复位信号),分位和秒位清零;
elsif cnt0 = "1001" then
cnt0 <= "0000";//完成上面一步后,执行这一句;当秒位计到9时(1001转十进制就是9),秒位清零;
else cnt0 <= cnt0 + 1;//如果没计到9,秒位就计一个数;
if cnt1 = "0101" then
cnt1 <= "0000"
else cnt1 <= cnt1 +1;//当分位计到5(二进制0101就是十进制的5)时清零;没计到5就计一个数;
if cnt0 = "1001"and cnt1 = "0101"then
a <= '1'; else a<='0'//当分位为5,秒位为9时,输出一个进位信号给a,否则a清零;
if嵌套语句建议参考c语言的同类语句,简单的说就是if的嵌套,越外围的指令优先级最高(例如:你里面的代码:
if clk'event and clk = '1' then
if reset = '1' then,
敏感端clk就比复位信号要优先,简单地说也是就如果clk的敏感信号没送过来,你复位摁几次都是一样的,
如果写成这样:
if reset = '1' then
if clk'event and clk = '1' then
就不管你有没有敏感信号(也称触发信号),摁下复位键,他就会对数据清零

最后说下其实时钟计不用这么麻烦,还有很多可以优化的地方;
恩,如果还在学的话,建议学下c语言,应该会对你有不小的帮助

其实这些涉及eda方面的东西都没什么人回答的,我已经说的很详细了,如果有什么不满意或出错的地方,希望能不吝指教
温馨提示:内容为网友见解,仅供参考
无其他回答

VHDL的IF语句是 IF THEN ELSIF 向上与怎么解释啊?
IF语句的执行是有优先性选择的,程序一进来会先判断条件1是否满足,然后是条件2,一直继续下去。看看如果还有不明白的给我发邮件吧liuyle04@gmail.com

VHDL语言的IF语句
IF语句最常用在process进程里面,不能直接放在结构体中,结构体可改为:-- Architecture Body ARCHITECTURE adder_architecture OF adder IS BEGIN PROCESS(a,b,ci)BEGIN IF(a='0' and b='0' and ci='0') THEN s<='0'; co<='0';END IF;END PROCESS ;END adder_architecture;...

vhdl语言关于if语句的问题。
else if(a'event and a='1')then if(counter="1111")then counter<="0000";else counter<=counter+'1';end if;else if(b'event and b='1')then if(counter="0000")then counter<="1111";else counter<=counter-'1';end if;end if;end if;end if;end process;end behav;你试试这...

求EDA用VHDL语言的程序设计,急急急!给高分!(要求完成一个具有异步复位和...
if (reset='1')then temp<="0000";elsif (enable='1') then if (clk' event and clk='1')then if (temp<="1000") then temp<=temp+1;else temp<="0000";end if;end if;end if;end process;process(temp)begin case temp is when "0000"=> xianshi<="0000001";count<='0';...

VHDL程序解释
process(clr) --- 进程语句,不过括号中要写入进程中所有的输入 信号,因此应该改成(clr,clk,clkdiv)begin --进程开始 if(clr='1') then --如果复位信号=1,clkdiv每一位全为0 clkdiv <= (others => '0');elsif(rising_edge(clk)) then --否则在时钟上升沿到来 clkdiv <= ...

vhdl语言中if语句里条件句到底要不要加括号?
没有歧义的的话可以不加:if dht_en='1' and dht_color="00" then 加括号是为了不产生歧义(下面如果把括号去掉,意思完全变了):if (state=s1 or state=s2) and datain_en='1' then

用VHDL语言IF语句来实现4选1数据选择器。哪位大神可以帮忙解答一下...
数据类型和输入应一致 end entity;architecture bhv of mux4_1 is signal s :std_logic_vector(1 downto 0);begin s<=s1&s2;process(s,a,b,c,d)begin if s="00" then y<=a;elsif s="01" then y<=b;elsif s="10" then y<=c;else y<=d;end if;end process;end bhv;...

VHDL中多个if递进的问题
这不是if语句的问题。在顺序语句中如果存在判断(例如if语句),则不要用信号,而要用变量。当需要改变信号值的时候,将变量赋值给信号。

VHDL中 怎么在确认一个条件语句之后执行多个顺序语句。
VHDL里if后的语句都是并行执行的,没有先后之分,如 A<='1';B<='0';if(C)then A<=A AND B;B<=A OR B;end if;结果A 是'0',B是'1'。非要追求顺序的话只能是B<=(A AND B) OR B;VHDL只是描述语言,不是逻辑语言

一个关于VHDL赋值语句执行顺序的问题
cnt是个信号而不是变量,所以“cnt<=cnt+1;”之后的if语句中所判断的cnt不是+1之后的值,而是+1之前的,是上一个仿真周期结束时的值。

相似回答