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

2024-11-28 09:34:37
推荐回答(1个)
回答1:

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方面的东西都没什么人回答的,我已经说的很详细了,如果有什么不满意或出错的地方,希望能不吝指教