首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:用VHDL写74l373遇到的问题

求助:用VHDL写74l373遇到的问题

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


返回列表