安裝anaconda,進行數據標註 1.安裝前準備:下好安裝包和所需文件 https://www.aliyundrive.com/s/XyH2JQ5TjCz 提取碼: 3c2w 2.運行anaconda安裝包,解壓labelimg-master文件 3.把resources.py文件放到/label ...
RTL例子
module led
(
input wire in1,
input wire in2,
input wire sel,
output reg out //輸出控制LED燈
);
//輸入只能是wire型變數 輸出可以是wire型變數也可以是reg型變數
//如果輸出是在always塊中被賦值(即在“<=”的左邊)就要用reg變數
//如果輸出在assign語句中被賦值(即在“=”的左邊)就要用wire型變數
always@(*)
//always@(sel,in1,in2)
//"*"為通配符,表示只要if括弧中的條件或賦值號右邊的變數發生變化,則立即執行下麵的代碼
//"*"在此always@中等價於“(sel,in1,in2)”寫法,使用always記得加@
/*
if(sel == 1'b1)
out = in1;
else
out = in2;
*/
//verilogs 中case寫法
case(sel)
1'b1 : out = in1;
1'b0 : out = in2;
default : out = in1; //default與C語言用法一樣,如果能窮舉所有情況就可不使用default
endcase
endmodule
Testbench例子
`timescale 1ns/1ns
module tb_led();
//要在initial塊和always塊中被賦值的變數一定是reg型
//在testbench 中待測試RTL模塊的輸入永遠是reg型變數
reg in1;
reg in2;
reg sel;
//在testbench中待測試RTL模塊的輸出永遠是wire型變數
wire out;
//initial語句是不可以被綜合的,一般只在testbench中表達而不在RTL代碼中表達
//initial塊中的語句上電後只執行一次,主要用於初始化模擬中要輸入的信號
//初始化值在沒有特殊要求的情況下給0和1都可以,如果不賦初值,模擬是信號會顯示不定態(ModelSim中的波形顯示紅色)
initial
begin
//在模擬中 begin...end 塊中的內容都是順序執行的,在沒有延時的情況下幾乎沒有差別,看上去是同時執行的,如果有延時才能表達的比較明瞭;
//而在 rtl 代碼中 begin...end 相當於括弧的作用,在同一個 always 塊中給多個變數賦值的時候要加上
in1 <= 1'b0;
in2 <= 1'b0;
sel <= 1'b0;
end
always #10 in1 <= {$random} % 2;
always #10 in2 <= {$random} % 2;
always #10 sel <= {$random} % 2;
initial begin
$timeformat(-9,0,"ns",6);;//設置顯示的時間格式,此處表示的是(列印時間單位為納秒,小數點後列印的小數位為0位,時間值後列印的字元串為“ns”
//列印的最小數量字元為6個
//只要監測的變數(時間、in1, in2, sel, out)發生變化,就會列印出相應的信息
$monitor("@time %t:in1=%b in2=%b sel=%b out=%b",$time,in1,in2,sel,out);
end
led led_inst //第一個是被實例化模塊的名子,第二個是我們自己定義的在另一個
//模塊中實例化後的名字。同一個模塊可以在另一個模塊中或不同的
//另外模塊中被多次實例化,第一個名字相同,第二個名字不同
(
//前面的“in1”表示被實例化模塊中的信號,後面的“in1”表示實例化該模塊並要和這個
//模塊的該信號相連接的信號(可以取名不同,一般取名相同,方便連接和觀察)
//“.”可以理解為將這兩個信號連接在一起
.in1(in1),
.in2(in2),
.sel(sel),
.out(out)
);
endmodule