字符效果仿真

2020-09-03 17:11:21 浏览数 (1)

1. 字符点阵产生

如图在PCtoLCD2002中输入数字ICer,点击生成字模,保存字模;

2.修改字模格式,删除提示信息,标点符号等;去掉全部0x,并逐一合并两项;(可以使用perl、python等提高效率)

修改后结果:

3.在代码文件中,利用readmemh函数读取生成的字模;

仿真如下:

可以制作表白文字,这就是工科人的浪漫吧!

工程代码:

代码语言:javascript复制
//TOP文件
module char_display
(
  input      clk,
  input      rst_n,
  output  [15:0]  out    
);
wire  [15:0]  data_out;
reg    [15:0]  count;
wire  [7:0]  raddr  =  count[15:8];
assign  out  =  {16{clk}} & data_out;

BRAM BRAM_inst
(
  .clk    (  clk      ) ,  // input  clk
  .wr_en    (  1'b0      ) ,  // input  wr_en
  .waddr    (  1'b0      ) ,  // input [MEMWIDTH-1:0] waddr
  .raddr    (  raddr    ) ,  // input [MEMWIDTH-1:0] raddr
  .data_in  (  8'b0      ) ,  // input [DATAWIDTH-1:0] data_in
  .data_out  (  data_out  )   // output [DATAWIDTH-1:0] data_out
);
defparam BRAM_inst.MEMWIDTH = 8;
defparam BRAM_inst.DATAWIDTH = 16;

always@(posedge clk,negedge rst_n)
begin
  if(!rst_n)
    count  <=  'b0;
  else
    count  <=  count     1'b1;
end
endmodule
代码语言:javascript复制
////////////////////////////////////////////////////////////////////////////////
//BRAM文件
////////////////////////////////////////////////////////////////////////////////
module BRAM 
   #(  
    parameter   MEMWIDTH   = 20,    //1024 * data 
    parameter  DATAWIDTH   = 1
   )               
   (
   input wire                   clk, 
   input wire                   wr_en,    //写有效信号
   input wire  [MEMWIDTH-1:0]    waddr,    //写地址
   input wire  [MEMWIDTH-1:0]    raddr,    //读地址
   input wire  [DATAWIDTH-1:0]   data_in,  //写入的数据
   output reg  [DATAWIDTH-1:0]   data_out  //读出的数据
   );


// Memory Array
reg  [DATAWIDTH-1:0] memory[0:(2**MEMWIDTH-1)];

initial
begin
//  $readmemh("E:/学习/char_display/char_display/数字ICer.txt",memory);
    $readmemh("E:/学习/char_display/char_display/我宣你.txt",memory);
end

always@(posedge clk)
begin
  if( wr_en )
    memory[waddr]  <=  data_in;
  data_out  <=  memory[raddr];
end

endmodule
代码语言:javascript复制
//仿真文件
`timescale 1 ps/ 1 ps
module char_display_vlg_tst();
reg clk;
reg rst_n;
wire [15:0]  out;

char_display i1 (
  .clk(clk),
  .out(out),
  .rst_n(rst_n)
);
initial   begin                                                  
      clk    =  0;
      rst_n  =  0;
  #100  rst_n  =  1;
  
  #1000000  
  $stop(2);                   
  end                                           
always  #10  clk  =  ~clk;                                                 
                                                  
endmodule

4.工程获取:包括代码工程及字模生成软件

0 人点赞