BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #14404同步于 2010/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

求助,为什么这段VHDL程序出不了正确的结果……

zxc12345
2010/7/15镜像同步24 回复
结果错得很没道理,可是检查不出到底哪里错了…………求大牛解答 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity jishu is port(clke:in std_logic; jishu_clk:in std_logic; cout:out std_logic_vector(26 downto 0) ); end jishu; architecture ji of jishu is signal c5,c4,c3,c2,c1,c0:std_logic_vector(3 downto 0); signal h:std_logic_vector(6 downto 0); begin process1:process(clke) begin if(clke'event and clke='1') then cout<="011111100000000000000000000"; c5<="0000";c4<="0000";c3<="0000";c2<="0000";c1<="0000";c0<="0000";h<="0111111"; else cout<=h&c4&c3&c2&c1&c0; end if; end process; process2:process(jishu_clk) begin if(jishu_clk'event and jishu_clk='1') then if(clke='1') then if(c0<"1001") then c0<=c0+1; else c0<="0000"; if(c1<"1001") then c1<=c1+1; else c1<="0000"; if(c2<"1001") then c2<=c2+1; else c2<="0000"; if(c3<"1001") then c3<=c3+1; else c3<="0000"; if(c4<"1001") then c4<=c4+1; else c4<="0000"; if(c5<"1001") then c5<=c5+1; else c5<="0000"; end if; end if; end if; end if; end if; end if; case c5 is when "0000"=>h<="0111111"; when "0001"=>h<="0000110"; when "0010"=>h<="1011011"; when "0011"=>h<="1001111"; when "0100"=>h<="1100110"; when "0101"=>h<="1101101"; when "0110"=>h<="1111101"; when "0111"=>h<="0000111"; when "1000"=>h<="1111111"; when "1001"=>h<="1101111"; when others=>h<="0111111"; end case; end if; end if; end process; end ji;
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chrischen25机器人#1 · 2010/7/15
看着有点复杂,你先说说功能吧,感觉计数器需要这么复杂吗?
zxc12345机器人#2 · 2010/7/15
就是一个频率计数器,之前已经分频了,一秒计数,一秒显示。 【 在 chrischen25 的大作中提到: 】 : 看着有点复杂,你先说说功能吧,感觉计数器需要这么复杂吗?
chrischen25机器人#3 · 2010/7/15
if(clke'event and clke='1') then cout<="011111100000000000000000000"; c5<="0000";c4<="0000";c3<="0000";c2<="0000";c1<="0000";c0<="0000";h<="0111111"; else cout<=h&c4&c3&c2&c1&c0; end if; 没有仔细看你的程序,但是个人觉得这里的 if else 有点问题,同时使用一个时钟的上下沿MS是不行的,否则倍频程序就太容易
chrischen25机器人#4 · 2010/7/15
if(clke='1')then else 不妨这样试试,我不知道对不对啊,呵呵
zxc12345机器人#5 · 2010/7/15
可是我想的是在时钟上升沿那个瞬间清零,然后在为'1’的时候计数,如果照你的改,就计不了数了啊………… 【 在 chrischen25 的大作中提到: 】 : if(clke='1')then : else : 不妨这样试试,我不知道对不对啊,呵呵
chrischen25机器人#6 · 2010/7/15
【 在 zxc12345 的大作中提到: 】 : 可是我想的是在时钟上升沿那个瞬间清零,然后在为'1’的时候计数,如果照你的改,就计不了数了啊………… : 【 在 chrischen25 的大作中提到: 】 : : if(clke='1')then : ................... 哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵
zxc12345机器人#7 · 2010/7/15
就是在上升沿的时候清零,然后在‘1’的时候计数,‘0’的时候显示 【 在 chrischen25 的大作中提到: 】 : 哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵
chrischen25机器人#8 · 2010/7/15
【 在 zxc12345 的大作中提到: 】 : 就是在上升沿的时候清零,然后在‘1’的时候计数,‘0’的时候显示 : 【 在 chrischen25 的大作中提到: 】 : : 哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵 : ................... 那现在你的程序是在上升沿清零,下降沿cout赋值(不知道这是不是你说的显示),在clke=‘1’的时候计数,而且这个计数要依赖于jishu_clk,还必须是在这个时钟的上升沿,同时clke=‘1’的时候才能计数,是这样吧?
zxc12345机器人#9 · 2010/7/15
恩~O(∩_∩)O~ 【 在 chrischen25 的大作中提到: 】 : 那现在你的程序是在上升沿清零,下降沿cout赋值(不知道这是不是你说的显示),在clke=‘1’的时候计数,而且这个计数要依赖于jishu_clk,还必须是在这个时钟的上升沿,同时clke=‘1’的时候才能计数,是这样吧?