求助:用VHDL写74l373遇到的问题
最近用用Verilog HDL语言写373后,把程序烧进CPLD,然后在单片机里运行读写外部RAM(HY8400,512K)时发现有些地址写不进去,比如以FF结尾的地址,我用的单片机是PHILIPS的P89C51RD2HBA,各位大侠以前遇到过这样的问题吗?以下是我写的VHDL代码,Verilog HDL 也写了,效果多一样。
下面使用VHDL语言,采用传统的自下而上的方法设计74373。
首先设计锁存器(Latch),将实现Latch的VHDL程序保存在文件latch.vhd中。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Latch IS
PORT ( D: IN STD_LOGIC;
ENA : IN STD_LOGIC;
Q : OUT STD_LOGIC );
END Latch;
ARCHITECTURE one OF Latch IS
SIGNAL sig_save : STD_LOGIC;
BEGIN
PROCESS ( D,ENA )
BEGIN
IF ENA = ’1’ THEN
Sig_save <= D;
END IF;
Q <= sig_save;
END PROCESS;
END one;
SN74LS373的VHDL语言设计程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_II64.ALL;
ENTITY SN74373 IS
PORT ( D : IN STD_LOGIC_VECTOR( 8 DOWNTO 1);
OEN, G : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR( 8 DOWNTO 1 ) );
END SN74373;
ARCHITECTURE one OF SN74373 IS
COMPONENT Latch
PORT ( D, ENA : IN STD_LOGIC;
Q : OUT STD_LOGIC);
END COMPONENT;
SIGNAL sig_mid : STD_LOGIC_VECTOR(8 DOWNTO 1);
BEGIN
GeLatch : FOR iNum IN 1 TO 8 GENERATE
Latchx : Latch PORT MAP( D(iNum), G, sig_mid(iNum) );
END GENERATE;
Q <= sig_mid WHEN OEN = ‘0’ ELSE “ZZZZZZZZ”;
END one;
ARCHITECTURE two OF SN74373 IS
SIGNAL sigvec_save : STD_LOGIC_VECTOR( 8 DOWNTO 1);
BEGIN
PROCESS ( D, OEN, G)
BEGIN
IF OEN = ‘0’ THEN
Q <= sigvec_save;
ELSE
Q <= “ZZZZZZZZ”;
END IF;
IF G = ‘1’ THEN
Sigvec_save <= D;
END IF;
END PROCESS;
END two;
以下是Verilog HDL代码:
以下是Verilog HDL代码:
module cpld(l_addr_out,ale);
output [7:0] l_addr_out;
input ale;
always @(negedge ale)
begin
mcu_8400_data = mcu_data;
end
assign l_addr_out = mcu_8400_data ;
endmodule
这个写的有点简单,我只用上面的64K做实验,HY8400的高三位一直附0。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |