Modelsim波形顯示字符


  偶然在 QQ 群里看到一個大佬發的 Modelsim 波形顯示字符,閑着沒事拿來玩玩,並將改良過程也整理一下。

 

一、字符點陣產生

  軟件采用 PCtoLCD2002,打開后不需要設置,直接打字然后點擊【生成字模】,然后復制產生的字模。

 

 二、字模調整

  復制之后的字模如下所示:

  將字模中的提示信息、標點符號、注釋都刪除。並且將相鄰兩個數據調整為一個數據,並將調整后的所有數據調整為一列,如下所示:

  調整完后將該文件重命名並修改后綴為【char.hex】,供后面 Verilog 讀取該文件。

 

三、代碼設計

  原文的設計有 2 個 Verilog 設計文件和 1 個 testbench 文件,我將其合並為 1 個,如下所示:

 1 `timescale 1ns/1ps  //時間精度
 2 
 3 module char_display;
 4 //========================< 信號 >==========================================
 5 reg                         clk = 0                 ;   //時鍾,初始為0
 6 reg     [15:0]              ram[2**8-1:0]           ;   //數組
 7 reg     [15:0]              cnt = 0                 ;   //計數器,初始為0
 8 wire    [ 7:0]              rd_addr                 ;   //讀地址
 9 reg     [15:0]              rd_data                 ;   //數組讀數據
10 wire    [15:0]              char                    ;   //字符顯示
11 //========================< 代碼 >==========================================
12 //時鍾
13 always #10 clk = ~clk;
14 
15 //數組初始化,讀取字符數據
16 initial $readmemh("char.hex", ram);
17 
18 //數組讀地址
19 always@(posedge clk) begin
20     cnt <= cnt + 1'b1;
21 end
22 
23 assign rd_addr = cnt[15:8];
24 
25 //數組讀數據
26 always @(posedge clk) begin
27     rd_data <= ram[rd_addr];
28 end 
29 
30 //波形輸出(rd_data已經有形狀了,再把它加粗)
31 assign char = rd_data[15:0] & {16{clk}};
32 
33 
34 endmodule

 

四、仿真波形

  建立 Modelsim 工程並顯示 char 信號的波形,展開 char 信號即可看到字符了。當然也可以寫個腳本自動化仿真,腳本文件如下所示:

 1 # ========================< 清空軟件殘留信息 >==============================
 2 
 3 # 退出之前仿真
 4 quit -sim
 5 
 6 # 清空信息
 7 .main clear
 8 
 9 # =========================< 建立工程並仿真 >===============================
10 
11 # 建立新的工程庫
12 vlib work
13 
14 # 映射邏輯庫到物理目錄
15 vmap work work
16 
17 # 編譯文件
18 vlog *.v
19 
20 # 啟動仿真:10.7之前版本的仿真請將"-voptargs=+acc換成-novopt"
21 vsim -voptargs=+acc work.char_display
22 
23 # ============================< 加載波形 >==================================
24 
25 # 添加標簽和波形
26 add wave -position insertpoint  \
27 {sim:/char_display/char[15]}    \
28 {sim:/char_display/char[14]}    \
29 {sim:/char_display/char[13]}    \
30 {sim:/char_display/char[12]}    \
31 {sim:/char_display/char[11]}    \
32 {sim:/char_display/char[10]}    \
33 {sim:/char_display/char[9]}     \
34 {sim:/char_display/char[8]}     \
35 {sim:/char_display/char[7]}     \
36 {sim:/char_display/char[6]}     \
37 {sim:/char_display/char[5]}     \
38 {sim:/char_display/char[4]}     \
39 {sim:/char_display/char[3]}     \
40 {sim:/char_display/char[2]}     \
41 {sim:/char_display/char[1]}     \
42 {sim:/char_display/char[0]}
43 
44 # 跑400us
45 run 400us

  最后的結果如下所示:

   也可以發揮創造力,弄個兩行的字符波形出來,只需要將關鍵代碼多設置一份就行了。

 

五、工程鏈接 

鏈接:https://pan.baidu.com/s/1kKI0d2TzDfh78Ed_RAMcAA
提取碼:867g

參考資料:公眾號《數字積木》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM