Verilog:輸出入功能

Verilog

基本語法

型態

全域變數

基本元件

多樣的寫法

指定

assign

always

initial

運算式

分枝

迴圈

模組

函數

Task

陣列

輸出入

觀察

真值表

測試程式

訊息顯示

注意事項

模擬程序

硬體工程

程式範例

Xor

Xor3

全加器

加法器

加減器

快速加法器

乘法器

ALU

閂鎖器

脈衝偵測

計數器

多工器

暫存器群

記憶體

延遲問題

浮點數

狀態機

程式計數器

CPU0-Mini

CPU0

pipeline

工具

QuartusII

Icarus

Veritek

訊息

相關網站

參考文獻

最新修改

簡體版

English

注意:在 Verilog 當中不支援陣列參數的傳遞,但在 SystemVerilog 當中則可以。

測試模組:romTest.v

`timescale 1ns/10ps

module romTest;

reg [31:0] m [0:11];

reg t = 0;
wire o;

rom DUT (.i(t), .o(o));

initial $readmemh("rom.txt", m);

integer k;

initial begin
    $display("Contents of Mem after reading data file:");
    for (k=0; k<12; k=k+1) $display("%d:%h",k,m[k]);
end

endmodule

由於筆者在執行時,發現如果最上層元件 Top-Level Entity 沒有基本輸出入會無法跑 Altera Quartus II version 11 的 ModelSim 模擬,因為會出現下列錯誤

Top partition does not contain any logic

因此筆者強制加入了一個上層元件 rom DUT (.i(t), .o(o)),以便讓模擬可以順利執行,檔案 rom.v 的程式碼如下。

module rom(input i, output reg o);
reg a;
always @(i) begin
  a = i;
  o = a;
end
endmodule

輸入檔

// $readmemh demo

02328020  // first 32-bit value
02328022  // second 32-bit value
02328024  // third value
02328025  // etc.

// can break up into related groups, insert comments, etc.

8e700002
ae700001
1232fffa
1210fff9  // last value

執行結果

...
# Loading work.romTest
# Loading work.rom
# Loading cycloneiv_ver.cycloneiv_io_obuf
# Loading cycloneiv_ver.cycloneiv_io_ibuf
# SDF 6.6d Compiler 2010.11 Nov  2 2010
# 
# Loading instances from CPU0M_v.sdo
# Loading timing data from CPU0M_v.sdo
# ** Warning: (vsim-WLF-5000) WLF file currently in use: vsim.wlf
#           File in use by:   Hostname:   ProcessID: 1
#           Attempting to use alternate WLF file "./wlfts6d82z".
# ** Warning: (vsim-WLF-5001) Could not open WLF file: vsim.wlf
#           Using alternate file: ./wlfts6d82z
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
#    Time: 0 ps  Iteration: 0  Region: /romTest  
#          File: D:/ccc100/Altera/CPU0M/romTest.v
# 
# add wave *
# view structure
# .main_pane.structure.interior.cs.body.struct
# view signals
# .main_pane.objects.interior.cs.body.tree
# run 10 us
# Contents of Mem after reading data file:
#           0:02328020
#           1:02328022
#           2:02328024
#           3:02328025
#           4:8e700002
#           5:ae700001
#           6:1232fffa
#           7:1210fff9
#           8:xxxxxxxx
#           9:xxxxxxxx
#          10:xxxxxxxx
#          11:xxxxxxxx

注意:使用 readmemh 等輸出入函數時,必須要將文字檔放在 simulation/modelsim,否則將會讀取不到。

參考文獻

readmemh

  1. 如何编写testbench的总结 — http://lib.dicder.com/hdl/2010/0618/336.html
  2. verilog ROM初始化 — http://chengfei21.blog.hexun.com.tw/32910798_d.html
    • 重點:$readmemh(“ C:/project/mem.dat”, mem_arry); 其中必須用反斜線。
  3. 基廉列克雜記本
  4. Verilog Examples
  5. Verilog readmemh (or readmemb) function in rtl
  6. Verilog Using $readmem or $readmemh in Modelsim

陣列初始化

  1. How to declare and use 1D and 2D byte arrays in Verilog?

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License