|
发表于 2011-4-8 19:08:38
|
显示全部楼层
你还在C语言的思想写VHDL,VHDL是描述硬件,有实时的特点,少用IF和FOR循环
程序的主要问题是在mcu_clk变化时,你那么多IF,CPLD做不了那么多事,不能捕捉到信号.
核心改动如下,你试试,另外你上位机控制信号mtmp应在mcu_clk跳变时处理好同步/异步的问题.
if(mtmp = "0000" ) then --初始化
i:=0;
REG8(1):= "11111111"; --初始化内存
REG8(0):= "11111111"; --初始化内存
elsif(mtmp != "0000" ) then --非空运行
if(rising_edge(mcu_clk) ) then --上升沿时执行
if(mtmp="0001" ) then --mcu_clk上升沿同时mtmp="0001"时执行
REG8(i):=temp; --写内存 --第一次将数据写入REG8(0),REG8(1)将在下一mcu_clk上升沿写入
i:=i+1; --i+1
elsif(mtmp="0010" ) then
datOutD<= REG8(0) & REG8(1);--将内存数据输出,以便检查内存数据是否正确
end if;
end if;
end if; |
|