首页 > 微波/射频 > 射频学习交流 > VHDL波形不对

VHDL波形不对

录入:edatop.com    阅读:
我先写了一部分程序,但是发现出来的波形和预期的不一样,总是数据传不到sdio_0里,但是看了很久都看不出,所以跪求大神指导。


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use ieee.STD_LOGIC_UNSIGNED.ALL;

entity data is
port(
reset1:in std_logic;
sclk: in std_logic;
sdio_0ut std_logic;
io_updateut std_logic
     );
end data;
architecture Behavioral of data is
signal addr_mem: std_logic_vector(7 downto 0);                --八位控制指令,第一位为1表示写,0表示读;
signal data_mem: std_logic_vector(31 downto 0);               --寄存器的大小统一定义为32位;
signal addr_sig: std_logic_vector(4 downto 0) :="00000";
signal controls: std_logic :='1';
signal sdio: std_logic;
begin
addr_mem <= "000" & addr_sig;
sdio_0 <= sdio;
rst:process(sclk)
    variable cnt_rst :integer range 0 to 7 :=0;
begin
    if rising_edge(sclk) then                       --计数sclk_sig信号上升沿,每次减一
     if reset1='1' then
   if cnt_rst=7 then
          null;
         else
          cnt_rst := cnt_rst + 1;                  --复位时长为255个SCLK周期
         end if;
        end if;
end if;
end process rst;
data1:process(sclk)
begin
  if rising_edge(sclk) then
     if reset1='0' then
     case addr_sig is
  when "00000" =>
data_mem <= B"11110000_00000000_00000000_00000000";
  when "00001" =>
data_mem <= B"11010000_00000000_01000000_00000000";
  when "00010" =>
data_mem <= B"00000000_00000000_00000000_00000000";
  when "00011" =>
data_mem <= B"10000000_11000011_00100010_00000000";
  when "00100" => data_mem <= B"00001111_01011100_00101000_11110110";
  when "00111" =>
data_mem <= B"00000000_01010000_00000000_00000000";
  when "01000" =>
data_mem <= B"00000000_10000011_00010010_01101111";
  when "01010" =>
data_mem <= B"01001100_11001100_11001101_00001010";
  when others  => data_mem <= B"00000000_00000000_00000000_00000000";
     end case;
end if;
end if;
end process data1;
con_trans:process(sclk)
variable i :integer range 7 downto 0 :=7;
begin
  if rising_edge(sclk) then
     if reset1='0' then
     if controls='1' then
     if i=0 then
   controls<='0';
i:=7;
  else
   sdio<=addr_mem(i);
i:=i-1;
  end if;
  end if;
end if;
  end if;
end process con_trans;
addr0:process(sclk)
variable addr0_i :integer range 31 downto 24 :=31;
begin
  if rising_edge (sclk) then
    if reset1='0' then
    if controls='0' then
   if addr_sig="00000" then
  if addr0_i=24 then
     controls<='1';
  addr_sig<=addr_sig+1;
  addr0_i:=31;
  else
     sdio<=data_mem(addr0_i);
  addr0_i:=addr0_i-1;
  end if;
end if;
end if;
end if;
end if;
end process addr0;
end Behavioral;

申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程

上一篇:想請問關於ADS momentun詳細教學
下一篇:HFSS 电感仿真问题

射频和天线工程师培训课程详情>>

  网站地图