求助:用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。
|