一、读文件中的参数
1,举例1
integer bmp_data_in ;
initial begin
bmp_data_in = $fopen("./txt/bmp_data_in.txt","r");
end
always @(posedge bmp_vsync_flag) begin
$fscanf(bmp_data_in,"%d %d %x %d %d %d %d %d %x %x %x %x %x %x",pixel_reversal, pixel_rgb_disable, pixel_rgb_offset, pixel_adj_dir, pixel_adj_en, link_bit,
ch0_rgb_adj_en, ch1_rgb_adj_en,
link0_bmp_data, link1_bmp_data, link2_bmp_data, link3_bmp_data, rgb_adj_pixel_link0, rgb_adj_pixel_link1);
end
对应的txt格式如下:
最后会依次读每一行,直到读到最后一行,然后一直就是最后一行
二、写文件
1,举例1
integer cross_cursor_output1;
integer cross_cursor_output2;
initial begin
cross_cursor_output1 = $fopen("./txt/cross_cursor_output1.txt","w");
cross_cursor_output2 = $fopen("./txt/cross_cursor_output2.txt","w");
end
always @(posedge lvds_sysClk) begin
if (poc_bmp_data_de &&(cnt == 7'd1))
$fwrite(cross_cursor_output1,"%d %d %d %d\n",pod_bmp_data_link1, pod_bmp_data_link3, pod_bmp_data_link0, pod_bmp_data_link2);
else if (poc_bmp_data_de &&(cnt == 7'd4))
$fwrite(cross_cursor_output2,"%d %d %d %d\n",pod_bmp_data_link4, pod_bmp_data_link5, pod_bmp_data_link6, pod_bmp_data_link7);
end
对应的写的txt格式如下
三、其它常用代码
1,生成时钟
sysclk = #(1000/75/2) ~ sysclk ;
2,生成波形文件
//------- fsdb operation ------
initial begin
$fsdbDumpfile("test_top.fsdb");
$fsdbDumpvars;
end
有时候波形文件太大了,可以分多个文件
initial begin
$fsdbAutoSwitchDumpfile(100,"cross_cursor.fsdb", 10);
$fsdbDumpvars();
end
这条语句表示将fsdb文件分成每个大小为100MB的文件,最多输出10个文件。每个文件的仿真时间范围记录在test.log文件中。
3,行场计数
/***********************对外接口****************************/
wire patterm_de;
wire patterm_vsync;
wire patterm_hsync;
assign patterm_de = dp_buffer_tx1_vid_de;
assign patterm_vsync = dp_buffer_tx1_vid_vs;
assign patterm_hsync = dp_buffer_tx1_vid_hs;
/***************************************************/
reg [15:0] vdma_bmp_de_cnt /* synthesis preserve */ ;
reg [15:0] vdma_bmp_hs_cnt /* synthesis preserve */ ;
reg [15:0] vdma_bmp_vs_cnt /* synthesis preserve */ ;
reg vdma_bmp_de_r /* synthesis preserve */ ;
reg vdma_bmp_vsync_r /* synthesis preserve */ ;
reg vdma_bmp_hsync_r /* synthesis preserve */ ;
assign vdma_bmp_de_cnt_w = vdma_bmp_de_cnt ;
assign vdma_bmp_hs_cnt_w = vdma_bmp_hs_cnt ;
assign vdma_bmp_vs_cnt_w = vdma_bmp_vs_cnt ;
always@(posedge lvds_sysClk)
begin
vdma_bmp_de_r <= patterm_de ;
vdma_bmp_vsync_r <= patterm_vsync ;
vdma_bmp_hsync_r <= patterm_hsync ;
end
always@(posedge lvds_sysClk)
begin
if(sysRst_n)
vdma_bmp_de_cnt <= 0;
else if(patterm_de)
vdma_bmp_de_cnt <= vdma_bmp_de_cnt + 1;
else
vdma_bmp_de_cnt <= 0;
end
always@(posedge lvds_sysClk)
begin
if(sysRst_n)
vdma_bmp_hs_cnt <= 0;
else if(patterm_vsync & (~vdma_bmp_vsync_r))
vdma_bmp_hs_cnt <= 0;
else if(patterm_de & (~vdma_bmp_de_r))
vdma_bmp_hs_cnt <= vdma_bmp_hs_cnt + 1;
else
;
end
always@(posedge lvds_sysClk)
begin
if(sysRst_n)
vdma_bmp_vs_cnt <= 0;
else if(patterm_vsync & (~vdma_bmp_vsync_r))
vdma_bmp_vs_cnt <= 0;
else if(patterm_hsync & (~vdma_bmp_hsync_r))
vdma_bmp_vs_cnt <= vdma_bmp_vs_cnt + 1;
else
;
end
/****** count patterm_hvalid end ******/
4,