文章目录
前言
在CPU仿真过程中,通常会用到uart打印来进行调试,但是如果我们用实际的uart IP来进行仿真,那么仿真速度会非常慢,这个时候我们就需要写一个uart的仿真模型,来替代实际的uart IP,来实现打印。
一、uart打印仿真模型
uart通常是作为外设,挂在总线上,我这里以APB总线为例,简单的写一个uart的仿真模型,其他的总线基本类似。
`timescale 1ns/1ps
module fakeuart(
PCLK,
PRESETn,
PSEL,
PENABLE,
PWRITE,
PADDR,
PWDATA,
PRDATA
);
input PCLK;
input PRESETn;
input PSEL;
input PENABLE;
input PWRITE;
input [10:0] PADDR;
input [15:0] PWDATA;
output[15:0] PRDATA;
integer uart_log;
reg time_out_put;
always @(posedge PCLK or negedge PRESETn)
if(PRESETn!)
time_out_put <= 1;
else if(PSEL & PENABLE & PWRITE & (PADDR==16'h0) & (PWDATA=="\n"))
time_out_put <= 1;
else if(PSEL & PENABLE & PWRITE & (PADDR==16'h0))
time_out_put <= 0;
initial begin
uart_log=$fopen("./uart.log","w");
end
always @(posedge PCLK or negedge PRESETn) begin
if(time_out_put & PSEL & PENABLE & PWRITE & (PADDR==16'h0))
$fwrite(uart_log, "time :: %t | ",$realtime);
if(PSEL & PENABLE & PWRITE & (PADDR==16'h0))
$fwrite(uart_log, "%s", PWDATA[7:0]);
end
assign PRDATA = 16'h0
endmodule
总结
通过这个仿真模型,可以极大的加速仿真,还可以打印出对应的时间,方便调试。