仿真其它笔记

一、读文件中的参数

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,


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值