1 /********************************************************************************************************* 2 ** All right reserve 2008-2009(C) 3 ** Created & maintained by http://www.edaok.net 4 **======================================================================================================= 5 ** 模 块 名: ebi 6 ** 描 述: 连接类似于8051MCU外部总线模块, 输出从外部总线上接收的地址, 数据, 写信号线信号, 主要为工 7 ** 程中的其它模块提供外部总线的地址和数据 8 ** 9 ** 原 作 者: Adeko (from http://www.edaok.net) 10 ** 参 与 者: (...welcome you join in) 11 ** 12 **======================================================================================================= 13 ********************************************************************************************************/ 14 module ebi ( 15 clk, 16 17 ebi_ad, 18 ebi_addr_h, 19 ebi_wr_n, 20 ebi_rd_n, 21 ebi_ale, 22 23 we, 24 data_in, 25 data_out, 26 addr_out 27 ); 28 29 input clk; // 全局时钟 30 inout [7:0] ebi_ad; // 外部总线的地址/数据线 31 input [7:0] ebi_addr_h; // 外部总线高位地址线 32 input ebi_wr_n; // 外部总线写信号线 33 input ebi_rd_n; // 外部总线读信号线 34 input ebi_ale; // 外部总线地址锁存信号线 35 36 output we; // 写信号线上升沿有效信号 37 input [7:0] data_in; // 将要发送到外部总线上的数据 38 output [7:0] data_out; // 从外部总线上接收的数据 39 output [15:0] addr_out; // 从外部总线得到的16位地址线 40 41 42 /* 43 * 综合成8位锁存器, 当ALE高电平时锁存数据, 锁存外部总线的地址低8位 44 */ 45 reg [7:0] rAddrL; 46 wire [15:0] wAddr; 47 always @(ebi_ale or ebi_ad) 48 begin 49 if (ebi_ale) begin 50 rAddrL[7:0] <= ebi_ad[7:0]; 51 end 52 end 53 54 assign wAddr[15:0] = {ebi_addr_h[7:0], rAddrL[7:0]}; // 和地址高8位组合比16位地址 55 56 57 /* 58 * 产生和全局时钟同步的'写'信号上升沿信号,提供其它模块作为写线有效, 可以进行 59 * 数据读写 60 */ 61 62 wire wWrNeg; 63 assign wWrNeg = ~ebi_wr_n; 64 65 66 /* 67 * 输出端口 68 */ 69 assign ebi_ad = (~ebi_rd_n)? data_in : 8'hzz; // 输出三态, 当'读'信号为高时输出数据 70 71 assign addr_out[15:0] = wAddr[15:0]; // 输出外部总线的地址 72 73 //assign data_out[7:0] = rData[7:0]; // 输出外部总线锁存的数据 74 assign data_out[7:0] = ebi_ad[7:0]; 75 76 assign we = wWrNeg; // 输出写线有效信号, 同步于全局时钟 77 78 79 endmodule 80 81 /********************************************************************************************************* 82 ** End Of File 83 ********************************************************************************************************/