好玩的modelsim波形仿真显示汉字

先上效果图
在这里插入图片描述
verilog代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    07:08:29 03/06/2020 
// Design Name: 
// Module Name:    gen_line 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
 module gen_line
#(
   parameter COL_CNT = 16'd80,
     parameter TURN = 1'b1 
  )
   (
     input [127:0]row_data,
    output odata,
     
    input bit_clk,       //100ns
   input bit1_roll_clk, //2ns
    input reset_p
  );
  reg [15:0]col_cnt;
  wire odata_temp;

  always@(posedge bit_clk or posedge reset_p)
  begin
    if(reset_p)
      col_cnt <= 16'd0;
   else if(col_cnt == COL_CNT-1)
     col_cnt <= COL_CNT - 1'd1;
    else
      col_cnt <= col_cnt + 1'd1;
  end

  assign odata_temp_p = row_data[COL_CNT - 1 - col_cnt] ? bit1_roll_clk : 1'd1;
  assign odata_temp_n = row_data[COL_CNT - 1 - col_cnt] ? 1'd1 : bit1_roll_clk;

  assign odata = TURN ? odata_temp_n : odata_temp_p;

  endmodule

测试文件代码

`timescale 1ns/1ns

  module sim_char_display();
    wire [15:0]odata;
    reg [63:0]data1_row[15:0];
    reg [63:0]data2_row[15:0];
    
    reg bit_clk;
    reg bit1_roll_clk;
    reg reset_p;
    
    initial bit_clk = 1'b1;
    always #50 bit_clk = ~bit_clk;

    initial bit1_roll_clk = 1'b1;
    always #1 bit1_roll_clk = ~bit1_roll_clk;

    
    initial begin
      data1_row[15] = 64'h0020020022080000 ;
      data1_row[14] = 64'h3FF0010011080004;
      data1_row[13] = 64'h020000801110FFFE ;
      data1_row[12] = 64'h020000C000200004 ;
      data1_row[11] = 64'h020008807FFE0804 ;
      data1_row[10] = 64'h0208080040020404;
      data1_row[9 ] = 64'h7FFC280880040204 ;
      data1_row[8 ] = 64'h028028041FE00224 ;
      data1_row[7 ] = 64'h02802802004000C4 ;
      data1_row[6 ] = 64'h0480480201840304 ;
      data1_row[5 ] = 64'h04808802FFFE0C04;
      data1_row[4 ] = 64'h0880080001003004 ;
      data1_row[3 ] = 64'h0882081001001004 ;
      data1_row[2 ] = 64'h1082081001000044 ;
      data1_row[1 ] = 64'h207E07F005000028;
      data1_row[0 ] = 64'h4000000002000010 ;
    end               
   
  
   

      //reset
      initial begin
        reset_p = 1'b1;
        #200
        reset_p = 1'b0; 

        #8000
        $stop;    
      end

    generate
      genvar i;
      for(i=0;i<16;i=i+1)
      begin:gen_line_data1
        gen_line #(64,0)gen_line0(data1_row[i],odata[i],bit_clk,bit1_roll_clk,reset_p);
      end
    endgenerate

    
  endmodule

如果想修改显示的字,只需修改sim_char_display模块中数据代码,这些数据是通过取模软件生成的数据。我这里是在网上下载的一个字符取模软件,这里放一个取模软件生成的数据和点阵显示效果图。
使用的是16x16的点阵,对于这4个字,一行有64个点,共16行,使用16个64bit数据就可以表示这些字符数据。sim_char_display模块中第20行代码就是每个字符对应的第1,2个数据,第21行代码就是每个字符对应的第3,4个数据,以此类推,对想显示的数据进行修改。
除此之外,还有个地方需要对应的做修改和设置,sim_char_display模块中代码55行,在进行gen_line例化时需要注意例化参数的修改。gen_line中参数COL_CNT是设置一行显示的字的个数*16。TURN参数是设置显示效果,COL_CNT设置为1效果是绿底黑字,设置为0效果是黑底绿字。

取模软件导出的数据一般两个16进制数为一个数据,如下:

/* GB2312 16x16点阵字库*/
/* 字串 啊啊啊啊   64x16  */
0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x2F,0x7E,0x2F,0x7E,0x2F,0x7E,0x2F,0x7E,
0xF9,0x04,0xF9,0x04,0xF9,0x04,0xF9,0x04,0xA9,0x04,0xA9,0x04,0xA9,0x04,0xA9,0x04,
0xAA,0x14,0xAA,0x14,0xAA,0x14,0xAA,0x14,0xAA,0x7C,0xAA,0x7C,0xAA,0x7C,0xAA,0x7C,
0xAC,0x54,0xAC,0x54,0xAC,0x54,0xAC,0x54,0xAA,0x54,0xAA,0x54,0xAA,0x54,0xAA,0x54,
0xAA,0x54,0xAA,0x54,0xAA,0x54,0xAA,0x54,0xA9,0x54,0xA9,0x54,0xA9,0x54,0xA9,0x54,
0xE9,0x74,0xE9,0x74,0xE9,0x74,0xE9,0x74,0xAD,0x54,0xAD,0x54,0xAD,0x54,0xAD,0x54,
0x0A,0x04,0x0A,0x04,0x0A,0x04,0x0A,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x04,
0x08,0x14,0x08,0x14,0x08,0x14,0x08,0x14,0x08,0x0C,0x08,0x0C,0x08,0x0C,0x08,0x0C,

这里每行64个16进制数,共8行,每行的数据实际是显示时的两行,我们可以在word里截断为两行,然后将0x和 , 替换为空,
就会如下显示,便于我们复制粘贴到代码中:
0020020022080000
3FF0010011080004
020000801110FFFE
020000C000200004
020008807FFE0804
0208080040020404
7FFC280880040204
028028041FE00224
02802802004000C4
0480480201840304
04808802FFFE0C04
0880080001003004
0882081001001004
1082081001000044
207E07F005000028
4000000002000010
附一取模软件:https://download.csdn.net/download/weixin_44884357/12230992

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值