⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ebi.v

📁 一个串口的完整FPGA工程
💻 V
字号:
/*********************************************************************************************************
 **                                  All right reserve 2008-2009(C) 
 **                           Created & maintained by http://www.edaok.net
 **=======================================================================================================
 ** 模 块 名:   ebi
 ** 描    述:   连接类似于8051MCU外部总线模块, 输出从外部总线上接收的地址, 数据, 写信号线信号, 主要为工
 **             程中的其它模块提供外部总线的地址和数据
 **
 ** 原 作 者:   Adeko (from http://www.edaok.net)
 ** 参 与 者:   (...welcome you join in)
 **
 **=======================================================================================================
 ********************************************************************************************************/
module ebi (
    clk,

    ebi_ad, 
    ebi_addr_h, 
    ebi_wr_n, 
    ebi_rd_n, 
    ebi_ale, 

    we,
    data_in,
    data_out,
    addr_out
);

input               clk;                                        //  全局时钟
inout   [7:0]       ebi_ad;                                     //  外部总线的地址/数据线
input   [7:0]       ebi_addr_h;                                 //  外部总线高位地址线
input               ebi_wr_n;                                   //  外部总线写信号线
input               ebi_rd_n;                                   //  外部总线读信号线
input               ebi_ale;                                    //  外部总线地址锁存信号线

output              we;                                         //  写信号线上升沿有效信号
input   [7:0]       data_in;                                    //  将要发送到外部总线上的数据
output  [7:0]       data_out;                                   //  从外部总线上接收的数据
output  [15:0]      addr_out;                                   //  从外部总线得到的16位地址线


/*
 *  综合成8位锁存器, 当ALE高电平时锁存数据, 锁存外部总线的地址低8位
 */
reg     [7:0]       rAddrL;
wire    [15:0]      wAddr;
always @(ebi_ale or ebi_ad)
begin
    if (ebi_ale) begin
        rAddrL[7:0] <= ebi_ad[7:0];
    end
end

assign  wAddr[15:0] = {ebi_addr_h[7:0], rAddrL[7:0]};           //  和地址高8位组合比16位地址


/*
 *  产生和全局时钟同步的'写'信号上升沿信号,提供其它模块作为写线有效, 可以进行
 *  数据读写
 */

wire                wWrNeg;
assign  wWrNeg = ~ebi_wr_n;


/*
 *  输出端口
 */
assign  ebi_ad = (~ebi_rd_n)? data_in : 8'hzz;                  //  输出三态, 当'读'信号为高时输出数据

assign  addr_out[15:0] = wAddr[15:0];                           //  输出外部总线的地址

//assign  data_out[7:0]  = rData[7:0];                            //  输出外部总线锁存的数据
assign  data_out[7:0]  = ebi_ad[7:0];

assign  we = wWrNeg;                                            //  输出写线有效信号, 同步于全局时钟


endmodule

/*********************************************************************************************************
 ** End Of File
 ********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -