一个串口的完整FPGA工程

源代码在线查看: ebi.v

软件大小: 2023 K
上传用户: archimedes88
关键词: FPGA 串口 工程
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*********************************************************************************************************
				 **                                  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] 				    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
				 ********************************************************************************************************/
				
							

相关资源