说明:编辑环境是 QuartusII 5.0<br />问题现象:在这个编辑环境中仿真 波形正常,烧到芯片里后没有波形输出或波形异常。<br />设置说明:在Timing requirement and option 里设置Delay requirements 中分别设置TSU等4参数为空、1ns或10ns 烧入芯片后现象一样。<br />代码如下:LIBRARY ieee;<br />USE ieee.std_logic_1164.all;<br />USE ieee.std_logic_unsigned.all;<br /><br />ENTITY CCD_DRIVER IS<br /><br />PORT<br /> ( Rst:IN STD_LOGIC;<br /> CLK8mHz: IN STD_LOGIC;<br /> INT_ACK:IN STD_LOGIC;<br /> SH:BUFFER STD_LOGIC;<br /> TmpFre1:buffer std_logic_VECTOR(1 DOWNTO 0);<br /> RS:BUFFER STD_LOGIC;<br /> CP:BUFFER STD_LOGIC;<br /> CR1:BUFFER STD_LOGIC;<br /> CR2:BUFFER STD_LOGIC;<br /> OE_CPU:IN STD_LOGIC;<br /> WE_CPU:IN STD_LOGIC;<br /> ADC_INT:BUFFER STD_LOGIC;<br /> WE_SRAM:BUFFER STD_LOGIC;<br /> RD_SRAM:OUT STD_LOGIC; <br /> ADC_CLK:BUFFER STD_LOGIC;<br /> TmpCLK: BUFFER STD_LOGIC;<br /> ADC_OE:OUT STD_LOGIC; <br /> ADD_ADC:BUFFER STD_LOGIC_VECTOR(12 DOWNTO 0);<br /> ADD_CPU:IN STD_LOGIC_VECTOR(12 DOWNTO 0)--;<br /> );<br /> <br />END CCD_DRIVER;<br /><br />ARCHITECTURE ART OF CCD_DRIVER IS<br />signal TmpFre2: INTEGER RANGE 0 TO 8388;<br />signal Tmpwe:std_logic_vector(2 downto 0);<br />SIGNAL TemClkTest: STD_LOGIC_VECTOR(2 DOWNTO 0);<br />BEGIN<br /> <br />A: PROCESS(Rst,CLK8mHz,INT_ACK,OE_CPU,WE_CPU)<br /><br />BEGIN<br />IF(Rst='0') then<br /> TmpFre1<="00"; <br /> TmpFre2<=0; <br />ElSIF (CLK8mHz'EVENT AND CLK8mHz='1') THEN<br /> IF(INT_ACK='0') THEN<br /><br /> IF TmpFre1="00" THEN<br /> TmpFre1<="11";<br /> ELSE<br /> TmpFre1<=TmpFre1-'1';<br /> END IF;<br /> <br /> ADC_CLK<=TmpFre1(1);<br /><br /> IF (TmpFre2=8388) THEN <br /> TmpFre2<=0;<br /> ELSE<br /> TmpFre2<=TmpFre2+1;<br /> END IF;<br /><br /> RD_SRAM<='1';<br /> ADC_OE<='0';<br /> IF 4<=TmpFre2 AND TmpFre2<20 THEN<br /> SH<='1';<br /> ELSIF (TmpFre2<=8388) THEN <br /> SH<='0';<br /> END IF;<br /> <br /> IF 0<=TmpFre2 AND TmpFre2<=20 THEN <br /> CR1<='1';<br /> CR2<='0';<br /> RS<='0';<br /> CP<='0';<br /> ELSIF (TmpFre2<=8388) THEN <br /> CR1<= NOT(TmpFre1(1) XOR TmpFre1(0));<br /> CR2<= (TmpFre1(1) XOR TmpFre1(0));<br /> RS<=TmpFre1(1) AND TmpFre1(0);<br /> CP<=TmpFre1(1) AND TmpFre1(0);<br /> ELSE <br /> CR1<='1';<br /> CR2<='0';<br /> RS<='0';<br /> CP<='0';<br /> END IF;<br /> <br /> IF (158<=TmpFre2 AND TmpFre2<=8350) THEN <br /> WE_SRAM<=NOT CP;<br /> ELSE<br /> WE_SRAM<='1';<br /> END IF;<br /> <br /> TmpCLK<=CP OR WE_SRAM;<br /><br /> ELSE<br /> SH<='0';<br /> CR1<='0';<br /> CR2<='0';<br /> RS<='0';<br /> CP<='0';<br /> RD_SRAM<=OE_CPU;<br /> ADC_OE<='1';<br /> WE_SRAM<=WE_CPU;<br /><br /> END IF;<br /> END IF; <br />END PROCESS A;<br /><br />B:<br />PROCESS(ADC_CLK,TemClkTest,TmpCLK,INT_ACK,ADD_CPU)<br /> BEGIN<br /> IF (INT_ACK='0') THEN<br /> IF (TmpCLK'EVENT AND TmpCLK='1') THEN<br /> IF (ADD_ADC="1111111111111") THEN<br /> ADD_ADC<="0000000000000";<br /> ADC_INT<='1';<br /> ELSE<br /> ADD_ADC<=ADD_ADC+'1';<br /> ADC_INT<='0';<br /> END IF;<br /> END IF;<br /> ELSE<br /> ADD_ADC<=ADD_CPU;<br /> ADC_INT<='0'; <br /> END IF;<br /><br />END PROCESS B;<br /><br />END ART;<br /><br /><br />哪路高手帮我看看问题出在哪?<br />谢谢 |
|