iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Software Development

超簡單的 Verilog 入門講解系列 第 26

[Day 26] Verilog E-1 難度丁 P2海域的斬殺1 - Rs232訊號協議 TB設計(TB的初始框架)

  • 分享至 

  • xImage
  •  

老樣子從昨天寫的程式開始
程式碼如下:

module Rs232_test1(Data1,clk,reset1,Out1,En_out);
input Data1,reset1 ,clk;
output[7:0] Out1;
output En_out;

因此我們知道

  1. 屬於 input 的有 3個變數 : Data1、clk、reset1
  2. 屬於 Output 的有 2個變數 : Out1[7:0]、En_out

看一下圖片
https://ithelp.ithome.com.tw/upload/images/20221009/20135862dtzbHCI6Kj.png

因此我們定義一個 tb

module tb1();



endmodule

因此我們定義一個 tb 的 Rs232_test1 就稱呼為 Rs232_test_tb1

module tb1();


// 定義一個 tb 的 Rs232_test1  就稱呼為 Rs232_test_tb1
Rs232_test1 Rs232_test_tb1(.Data1(),.clk(),.reset1(),.Out1(),.En_out());




endmodule

現在要寫 TB 就是測試這個電路,所以首先要有3個 reg 分別是要接入 input 的訊號
為什麼要用 佔存器,因為等等會做控制

  1. 要接 Data1 的 Data_tb1
  2. 要接 clk 的 clk_tb1
  3. 要接 reset1 的 reset_tb1
module tb1();

// 3個 reg 分別是要接入 input 的訊號
reg Data_tb1;
reg clk_tb1;
reg reset_tb1;


Rs232_test1 Rs232_test_tb1(.Data1(),.clk(),.reset1(),.Out1(),.En_out());




endmodule

接下來要收2個 Output 的訊號,所以要寫兩個 Wire 來接線

  1. 要接 Out1[7:0] 的 Out_tb1[7:0]
  2. 要接 En_out 的 En_out_tb1
module tb1();

reg Data_tb1;
reg clk_tb1;
reg reset_tb1;

// 收2個 Output 的訊號,所以要寫兩個 Wire 來接線
Wire[7:0] Out_tb1;
Wire En_out_tb1;


Rs232_test1 Rs232_test_tb1(.Data1(),.clk(),.reset1(),.Out1(),.En_out());




endmodule

將他接上

Rs232_test1 Rs232_test_tb1(.Data1(),.clk(),.reset1(),.Out1(),.En_out());
接上後
** Rs232_test1 Rs232_test_tb1( **
** .Data1(Data_tb1),.clk(clk_tb1),.reset1(reset_tb1), **
** .Out1(Out_tb1),.En_out(En_out_tb1)); **

module tb1();

reg Data_tb1;
reg clk_tb1;
reg reset_tb1;

// 收2個 Output 的訊號,所以要寫兩個 Wire 來接線
Wire[7:0] Out_tb1;
Wire En_out_tb1;


Rs232_test1 Rs232_test_tb1(
    .Data1(Data_tb1),.clk(clk_tb1),.reset1(reset_tb1),
    .Out1(Out_tb1),.En_out(En_out_tb1)
    );
    

endmodule

接下來開始寫 剛剛 input 的 reg 設定方法

  1. reg Data_tb1;
  2. reg clk_tb1;
  3. reg reset_tb1;

使用 initial

module tb1();

reg Data_tb1;
reg clk_tb1;
reg reset_tb1;


Wire[7:0] Out_tb1;
Wire En_out_tb1;


Rs232_test1 Rs232_test_tb1(
    .Data1(Data_tb1),.clk(clk_tb1),.reset1(reset_tb1),
    .Out1(Out_tb1),.En_out(En_out_tb1)
    );
    
// 使用 initial
initial begin





end
   
endmodule

第一步的 tb 就是將他的 reg 初始化

initial 開頭將 input 的 reg 設定初始直
2. reg clk_tb1<=0;
3. reg reset_tb1<=0;

module tb1();

reg Data_tb1;
reg clk_tb1;
reg reset_tb1;


Wire[7:0] Out_tb1;
Wire En_out_tb1;


Rs232_test1 Rs232_test_tb1(
    .Data1(Data_tb1),.clk(clk_tb1),.reset1(reset_tb1),
    .Out1(Out_tb1),.En_out(En_out_tb1)
    );
    
// 使用 initial
initial begin

 clk_tb1<=0; reset_tb1<=0;




end
   
endmodule

接下來,製作 Clk 的時間,週期為 10 個時間,所以設定為 每 5個反轉

** always #5 clk<=~clk; **

module tb1();

reg Data_tb1;
reg clk_tb1;
reg reset_tb1;


Wire[7:0] Out_tb1;
Wire En_out_tb1;


Rs232_test1 Rs232_test_tb1(
    .Data1(Data_tb1),.clk(clk_tb1),.reset1(reset_tb1),
    .Out1(Out_tb1),.En_out(En_out_tb1)
    );
    

initial begin

Data_tb1<=0; clk_tb1<=0; reset_tb1<=0;

// 週期為 10 個時間,所以設定為 每 5個反轉


end

always #5 clk<=~clk;
   
endmodule

我們上面沒寫到 input 的 Data ,因為 Data 就是 RS232 的資料,明天再來撰寫


上一篇
[Day 25] Verilog E-1 難度丁 P2海域的消血5 - Rs232訊號協議 default ( 設計輸出4 )
下一篇
[Day 27] Verilog E-1 難度丁 P2海域的斬殺2 - Rs232訊號協議 TB設計2(計算輸入資料的 clk數量)
系列文
超簡單的 Verilog 入門講解30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言