在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 1418|回复: 0

[求助] VHDL波形不对

[复制链接]
发表于 2013-5-5 15:14:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我先写了一部分程序,但是发现出来的波形和预期的不一样,总是数据传不到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;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-10 07:46 , Processed in 0.017161 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表