sdram读写
源代码在线查看: uart_tx.v
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company :
// Engineer :
// Create Date :
// Design Name :
// Module Name : uart_tx
// Project Name :
// Target Device: Cyclone EP1C3T144C8
// Tool versions: Quartus II 8.1
// Description : 串口数据发送底层模块
// 1bit起始位+8bit数据+1bit停止位
// Revision : V1.0
// Additional Comments :
//
////////////////////////////////////////////////////////////////////////////////
module uart_tx(
clk,rst_n,
tx_data,tx_start,clk_bps,
rs232_tx,bps_start,fifo232_rdreq
);
input clk; // 25MHz主时钟
input rst_n; //低电平复位信号
input[7:0] tx_data; //待发送数据
input tx_start; //串口发送数据启动标志位,高有效
input clk_bps; //发送数据标志位,高有效
output rs232_tx; // RS232发送数据信号
output bps_start; //波特率时钟计数器启动信号,高有效
output fifo232_rdreq; //FIFO读请求信号,高有效
//---------------------------------------------------------
reg tx_en; //发送数据使能信号,高有效
reg[3:0] num;
always @ (posedge clk or negedge rst_n)
if(!rst_n) tx_en else if(num==4'd11) tx_en else if(tx_start) tx_en
assign bps_start = tx_en;
//tx_en脉冲上升沿检测,作为FIFO读使能信号
reg tx_enr1,tx_enr2; //tx_en寄存器
always @(posedge clk or negedge rst_n)
if(!rst_n) begin
tx_enr1 tx_enr2 end
else begin
tx_enr1 tx_enr2 end
assign fifo232_rdreq = tx_enr1 & ~tx_enr2; //tx_en上升沿置高一个时钟周期
//---------------------------------------------------------
reg rs232_tx_r; // RS232发送数据信号
always @ (posedge clk or negedge rst_n)
if(!rst_n) begin
num rs232_tx_r end
else if(tx_en) begin
if(clk_bps) begin
num case (num)
4'd0: rs232_tx_r 4'd1: rs232_tx_r 4'd2: rs232_tx_r 4'd3: rs232_tx_r 4'd4: rs232_tx_r 4'd5: rs232_tx_r 4'd6: rs232_tx_r 4'd7: rs232_tx_r 4'd8: rs232_tx_r 4'd9: rs232_tx_r default: rs232_tx_r endcase
end
else if(num==4'd11) num end
assign rs232_tx = rs232_tx_r;
endmodule