每次遇到问题都到这里来求助,真是个好地方,呵呵! 小弟最近学习VHDL的时候遇到一个问题。首先我把我预期的目的写出来:本来是来一个时钟就使输出移位一次,举个例子,来第一个clk输出00001,来第二个clk输出00010,来第三个clk输出00100,来第四个输出01000...........依此类推。 但是我写好程序并后,结果完全不同。我这个程序的基本思想是使用一个计数器,然后由计数器的计数值来决定输出的状态,这个本来可以用类似写译码器的列举方法来列举,但是由于这个输出太长了,是个矢量,一共19位,我觉得难写,就想另外想个办法(呵呵),我想,使上一个时钟的输出自身相加,即相当于使一个二进制数自身相加,不就相当于向高位移位一次吗?按照这个想法来写,结果仿真的后果是输出全部为零。下面是我的程序,请各位高手指导一下,为什么会出现这种结果? entity timctrl is port(clk:in std_logic; tmp:buffer std_logic_vector(19 downto 1)); end timctrl; architecture bhv of timctrl is signal count:std_logic_vector(4 downto 0); begin process(clk) begin if(clk'event and clk='1')then if(count="10011")then count<="00001"; else count<=count+'1'; end if; end if; end process; process(count) begin case count is when"00001"=>tmp<="0000000000000000001"; when others=>tmp<=tmp+tmp; end case; end process; end bhv; |