block例程:搭建字符串rom,并驱动uart_tx - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki
D1 仿真框图
- uart_tx波特率是115200, 需要注意binary counter位数
D2 rom_gen代码
- 注意字符串的定义方式,是定义一个位宽很大reg
- 注意字符串的索引方式,verilog不支持变量为范围的索引,例如str[8index: 8index+7]不行。我们只好采用了拼接的方式,或者用str[(8*index)+:8]这种新方法。
`timescale 1ns / 1ps
module rom_gen(
input sys_clk,
input sys_rst_n,
input xfer_req,
output reg [7:0] xfer_data,
output reg xfer_start
);
parameter N=14;
reg [0:8*N-1] str="hello world!\r\n";
reg [3:0] index;
always @(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==0) begin
index<=0;
xfer_data<=8'h00;
xfer_start<=0;
end
else if(xfer_req) begin
//xfer_data<={str[8*index],str[8*index+1],str[8*index+2],str[8*index+3],str[8*index+4],str[8*index+5],str[8*index+6],str[8*index+7]};
xfer_data<=str[(8*index) +:8];
xfer_start<=1;
index<=index+1;
if(index==N-1)
index<=0;
end
else
xfer_start<=0;
endmodule
D3 仿真结果
在xfer_req的下一个周期,输出xfer_data, xfer_start,并更新index
D4 上板验证结果
测试结果,非常ok!