|
5楼
楼主 |
发表于 2022-1-17 16:16:22
|
只看该作者
您好,非常感谢您的指导。您说的if没有用同步信号是指?
我之前使用的时CASE ,发现有问题,改成if 问题仍然存在。
这个是 case的代码
-
- case in_data_state is
-
- when 0 =>
- if(switch_in_buf/= switch_in)then
- switch_in_buf <=switch_in;
- end if;
-
- if(inst_in_buf/= inst_in)then
- inst_in_buf <=inst_in;
- end if;
-
- if(inst_in_buf ='0')then
- if(pulse_state_buf /=pulse_state) then
- in_data_state<= 1;
- pulse_state <=pulse_state_buf;
- pulse_test_buf <= NOT pulse_test_buf;
- number_save<=3;
- data_save(3)<=Count_get;
- send_time<=0;
- else
- in_data_state<=0;
- end if;
- else
- if(pulse_state2_buf /=pulse_state2) then
- pulse_state2 <=pulse_state2_buf;
- in_data_state<= 1;
- number_save<=0;
- data_save(0)<=Count_get2(7 downto 0)&Count_get2(15 downto 8)&conv_std_logic_vector(1, 8)&save_in(7 downto 0);
- data_save(1)<=ad_in(7 downto 0)&ad_in(15 downto 8)& conv_std_logic_vector(2, 8)&save_in(7 downto 0);
- data_save(2)<=ad_in(23 downto 16)&ad_in(31 downto 24)& conv_std_logic_vector(3, 8)&save_in(7 downto 0);
- data_save(3)<=ad_in(39 downto 32)&ad_in(47 downto 40)& conv_std_logic_vector(4, 8)&save_in(7 downto 0);
- send_time<=0;
- else
- in_data_state<=0;
- end if;
-
- end if;
-
- when 1 =>
- send_time<=send_time+1;
- if(send_time =1) then
- if f1_fi_wrusedw>=conv_std_logic_vector(2**AW-128,AW) then
- f1_wr_hfullbuf <= act_on;
- else
- f1_wr_hfullbuf <= act_off;
- end if;
-
- if(send_time >=2) then
- if(inst_in_buf ='1') then
- if(switch_in_buf ='1')then
- f1_wr_hfullbuf2<=act_off;
- else
- f1_wr_hfullbuf2<=act_on;
- end if;
- else
- f1_wr_hfullbuf2<=act_off;
- end if;
- f1_wr_hfull<=f1_wr_hfullbuf or f1_wr_hfullbuf2;
- send_time<=0;
- wr_clock<='1';
- in_data_state<=in_data_state + 1;--
- end if;
-
- when 2 =>
- send_time<=send_time+1;
- f1_fi_wrreq <= act_off;
- if(send_time >=1) then
- if DATA_DIR_IN='0' and f1_wr_hfull=act_off then --DATA_DIR_IN->0->EXT TO USB
- f1_fi_wrreq <= act_on;
- f1_fi_din <= data_save(number_save);
- end if;
- number_save<=number_save+1;
- in_data_state<=in_data_state + 1;--
- send_time<=0;
- end if;
- when 3 =>--
- send_time<=send_time+1;
- if(send_time >=1) then
- if(number_save <4)then
- in_data_state<=1;
- else
- in_data_state<=0;
- end if;
-
- send_time<=0;
- wr_clock<='0';
- fifo_test_buf<= NOT fifo_test_buf;
- end if;
- when others =>
- in_data_state <= 0;
- end case;
复制代码
下面是目前用的if
-
- if(in_data_state = 0) then
-
- if(switch_in_buf/= switch_in)then
- switch_in_buf <=switch_in;
- end if;
-
- if(inst_in_buf/= inst_in)then
- inst_in_buf <=inst_in;
- end if;
-
- if(inst_in_buf ='0')then
- if(pulse_state_buf /=pulse_state) then
- in_data_state<=1;
- pulse_state <=pulse_state_buf;
- pulse_test_buf <= NOT pulse_test_buf;
- number_save<=3;
- data_save(3)<=Count_get;
- send_time<=0;
- end if;
- end if;
- if(inst_in_buf ='1')then
- if(pulse_state2_buf /=pulse_state2) then
- in_data_state<=1;
- pulse_state2 <=pulse_state2_buf;
-
- --fifo_test_buf<= NOT fifo_test_buf;
- number_save<=0;
- data_save(0)<=Count_get2(7 downto 0)&Count_get2(15 downto 8)&conv_std_logic_vector(1, 8)&save_in(7 downto 0);
- data_save(1)<=ad_in(7 downto 0)&ad_in(15 downto 8)& conv_std_logic_vector(2, 8)&save_in(7 downto 0);
- data_save(2)<=ad_in(23 downto 16)&ad_in(31 downto 24)& conv_std_logic_vector(3, 8)&save_in(7 downto 0);
- data_save(3)<=ad_in(39 downto 32)&ad_in(47 downto 40)& conv_std_logic_vector(4, 8)&save_in(7 downto 0);
-
- send_time<=0;
- end if;
- end if;
- elsif(in_data_state = 1)then
- send_time<=send_time+1;
- if(send_time =1) then
- -- if f1_fi_wrusedw>=conv_std_logic_vector(2**AW-8,AW) then
- if f1_fi_wrusedw>=conv_std_logic_vector(2**AW-128,AW) then
- f1_wr_hfullbuf <= act_on;
- else
- f1_wr_hfullbuf <= act_off;
- end if;
- end if;
-
- if(send_time >=2) then
- if(inst_in_buf ='1') then
- if(switch_in_buf ='1')then
- f1_wr_hfullbuf2<=act_off;
- else
- f1_wr_hfullbuf2<=act_on;
- end if;
- else
- f1_wr_hfullbuf2<=act_off;
- end if;
-
- f1_wr_hfull<=f1_wr_hfullbuf or f1_wr_hfullbuf2;
- send_time<=0;
- wr_clock<='1';
- in_data_state<=in_data_state + 1;
- end if;
- elsif(in_data_state = 2)then
- send_time<=send_time+1;
- f1_fi_wrreq <= act_off;
- if(send_time >=1) then
- if DATA_DIR_IN='0' and f1_wr_hfull=act_off then --DATA_DIR_IN->0->EXT TO USB
- f1_fi_wrreq <= act_on;
- f1_fi_din <= data_save(number_save);
- end if;
- number_save<=number_save+1;
- in_data_state<=in_data_state + 1;
- send_time<=0;
- end if;
- elsif(in_data_state = 3)then
- send_time<=send_time+1;
- if(send_time >=1) then
- if(number_save <4)then
- in_data_state<= 1;
- else
- in_data_state<=0;
- end if;
- send_time<=0;
- wr_clock<='0';
- fifo_test_buf<= NOT fifo_test_buf;
- end if;
- else
- in_data_state<=0;
- end if;
复制代码
|
|