0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Verilog/SystemVerilog硬件描述語言練習(xí)數(shù)字硬件設(shè)計

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-09-08 09:04 ? 次閱讀

HDLBits: 在線學(xué)習(xí) SystemVerilog(五)-Problem 19-23

HDLBits 是一組小型電路設(shè)計習(xí)題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習(xí)數(shù)字硬件設(shè)計~

網(wǎng)址如下:

https://hdlbits.01xz.net/

關(guān)于HDLBits的Verilog實現(xiàn)可以查看下面專欄:

https://www.zhihu.com/column/c_1131528588117385216

縮略詞索引

SV:SystemVerilog

Problem 19-Module

從這題開始會接觸到一個“熟悉的陌生人”-模塊module

截止目前,我們已經(jīng)對 Verilog 中模塊這一概念建立了初步的印象:模塊是一個電路,通過輸入輸出端口和外部的電路聯(lián)系。無論多大,多復(fù)雜的數(shù)字電路都是由一個個模塊以及其他組成部分(比如 assign 賦值語句以及 always 過程塊)互相連接所構(gòu)成的。在一個模塊中可以例化下一級的模塊,這就形成了層級的概念(hierarchy)。

模塊例化的基本語法 :模塊名 實例名(定義連接 port 的信號);

比如 mod_a instance1 ( wa, wb, wc );

模塊信號連接的三種方式:

在實例化模塊時,使用Verilog時有兩種常用的方式來進行模塊端口的信號連接:按端口順序以及按端口名稱連接端口。

按端口順序,mod_a instance1 ( wa, wb, wc ); wa, wb, wc 分別連接到模塊的 第一個端口(in1),第二個端口(in2)以及第三個端口(out)。這里所謂的端口順序指的是模塊端口的定義順序。這種方式的弊端在于,一旦端口列表發(fā)生改變,所有模塊實例化中的端口連接都需要改變。

按端口名稱,mod_a instance2 ( .out(wc), .in1(wa), .in2(wb) ); 在這種方式中根據(jù)端口名稱指定外部信號的連接。這樣一來就和端口聲明的順序完全沒有關(guān)系。一旦模塊出現(xiàn)改動,只要修改相應(yīng)的部分即可。實際上,一般都使用這種方式來進行模塊實例化。

這里建議初學(xué)者統(tǒng)一使用按端口名稱進行模塊例化,避免不必要的功能錯誤。

題目說明

在上面已經(jīng)定義了一個模塊mod_a,請例化該模塊,下圖時模塊mod_a定義。

941868f0-2f0e-11ed-ba43-dac502259ad0.png 圖片來自 HDLBits

這個題目的核心就是將上面的圖片里的模塊mod_a進行例化。

模塊端口聲明

moduletop_module(inputa,inputb,outputout);

題目解析

這個題目重點是模塊例化,可以使用上面介紹的任何一種方式(按端口順序以及按端口名稱連接端口)。

moduletop_module(inputlogica,inputlogicb,outputwirelogicout);

mod_am1(
.in1(a),
.in2(b),
.out(out)
);

endmodule


9441900e-2f0e-11ed-ba43-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結(jié)果:

9466a880-2f0e-11ed-ba43-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 20-Module_pos

題目說明

這道題也和上一題一樣,給出了一個模塊mod_a,該模塊按順序具有 2 個輸出和 4 個輸入。必須將6個端口按位置順序與頂層的端口out1,out2,a,b,c和d相連接。

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
inputd,
outputout1,
outputout2
);

題目解析

這道題難度不大,和上一題類似,加大對模塊例化的理解。

moduletop_module(
inputlogica,b,c,d,
outputwirelogicout1,out2
);
mod_am1(
out1,
out2,
a,
b,
c,
d
);

endmodule

在本題中對于給出的模塊來說,我們并不知道m(xù)od_a這個模塊的端口名是什么,所以對于本題來說,只能按照位置的順序來連接。

9497ed46-2f0e-11ed-ba43-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結(jié)果:

94bf8022-2f0e-11ed-ba43-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 21-Module_name

題目說明

這道題和上一題一樣,給出了一個名為mod_a的模塊,該模塊按某種順序具有2個輸出和4個輸入。必須將6個端口通過按名字的方法與頂層的端口相連接。

94ec8a04-2f0e-11ed-ba43-dac502259ad0.png 圖片來自 HDLBits

mod_a的定義如下:

modulemod_a(outputout1,outputout2,inputin1,inputin2,inputin3,inputin4);
9509d6b8-2f0e-11ed-ba43-dac502259ad0.png 圖片來自 HDLBits

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
inputd,
outputout1,
outputout2
);

題目解析

本題考查的和上一題一樣,只不過上一題沒有給出mod_a的端口定義,這一題給出了端口定義,所以我們需要使用按端口名稱來例化模塊。

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
inputlogicd,
outputwirelogicout1,
outputwirelogicout2
);

mod_am1(
.out1(out1),
.out2(out2),
.in1(a),
.in2(b),
.in3(c),
.in4(d)
);
endmodule


這道題有人覺得和上一道題一樣,也是同樣使用上一道題進行解答,但是會報錯,這是因為出題者考慮到了這種問題,所以題目給出的out1, out2, a, b, c, d不是mod_a正確的順序,只能按照名稱去例化。

95368406-2f0e-11ed-ba43-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結(jié)果:

95598dc0-2f0e-11ed-ba43-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 22-Module_shift

題目說明

給定一個名為my_dff(實現(xiàn) D 觸發(fā)器功能)模塊,該模塊具有兩個輸入和一個輸出。實例化三次,將它們鏈接在一起制作一個長度為 3 的移位寄存器。clk端口需要連接到所有實例。

提供的模塊是:

modulemy_dff(inputclk,inputd,outputq);

請注意,要建立內(nèi)部連接,需要聲明一些wire。wire和模塊例化時候命名要小心:名稱必須是唯一的。

958a3a6a-2f0e-11ed-ba43-dac502259ad0.png 圖片來自 HDLBits

問題的核心就是上面的圖片,例化和連線需要注意。

模塊端口聲明

moduletop_module(inputclk,inputd,outputq);

題目解析

這個題目還是模塊例化,需要理解例化的概念。需要將第一個例化的輸出,作為第二個例化模塊的輸入,以此類推。

moduletop_module(inputlogicclk,
inputlogicd,
outputlogicq
);

wirelogicq0,q1;

my_dfff1(
.clk(clk),
.d(d),
.q(q0)
);

my_dfff2(
.clk(clk),
.d(q0),
.q(q1)
);

my_dfff3(
.clk(clk),
.d(q1),
.q(q)
);

endmodule


95ab095c-2f0e-11ed-ba43-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結(jié)果:

95cb52c0-2f0e-11ed-ba43-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

Problem 23-Module shift8

本題是上一題的擴展。使用向量作為端口的連線。正如Verilog的語法一樣,端口的向量長度不必與連接到它的導(dǎo)線匹配,但這將導(dǎo)致向量的零填充或截斷。在本練習(xí)中不使用具有不匹配的向量連接。

題目說明

給出了一個名為my_dff8的模塊,包含兩個輸入和一個輸出(實現(xiàn)一個8bit的D觸發(fā)器)。請實例化三次,并將它們連接在一起,形成一個長度為3的8bit移位寄存器。此外,再寫出一個4選1多路復(fù)用器(未提供模塊模型),根據(jù)輸入的sel[1:0]選擇要輸出的內(nèi)容:輸入D的值,在第一個D觸發(fā)器之后的值,第二個或第三個D觸發(fā)器之后的值。(可以說sel選擇的是輸入延遲的的周期數(shù),0~3個時鐘周期不等。)

95fa3946-2f0e-11ed-ba43-dac502259ad0.png 圖片來自 HDLBits

這個題目的核心就是將上面的圖片里的模塊my_dff8進行例化。

模塊端口聲明

moduletop_module(
inputclk,
input[7:0]d,
input[1:0]sel,
output[7:0]q
);

題目解析

這個題目重點是模塊例化,和上一題差不多,注意一下向量定義及端口連接即可。

moduletop_module(
inputclk,
inputlogic[7:0]d,
inputlogic[1:0]sel,
outputlogic[7:0]q
);
logic[7:0]q0,q1,q2;

my_dff8d0(
.clk(clk),
.d(d),
.q(q0)
);

my_dff8d1(
.clk(clk),
.d(q0),
.q(q1)
);

my_dff8d2(
.clk(clk),
.d(q1),
.q(q2)
);

always_combbegin
uniquecase(sel)
2'b00:
q=d;
2'b01:
q=q0;
2'b10:
q=q1;
2'b11:
q=q2;
default:
q=2'bzz;
endcase
end


endmodule


這題中,涉及到了SV的組合邏輯設(shè)計,基本語法和Verilog類似,主要涉及到了一個unique決策修飾符,使用unique會指示綜合編譯器可以并行計算case項。這部分內(nèi)容會在SV的系列教程里繼續(xù)展開描述。

9622b5d8-2f0e-11ed-ba43-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結(jié)果:

9647c242-2f0e-11ed-ba43-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網(wǎng)站會對比這兩個波形,一旦這兩者不匹配,仿真結(jié)果會變紅。

這一題就結(jié)束了。

總結(jié)

今天的幾道題就結(jié)束了,主要考察模塊例化問題~

最后我這邊做題的代碼也是個人理解使用,有錯誤歡迎大家批評指正,祝大家學(xué)習(xí)愉快~

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3112

    瀏覽量

    65848
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109713
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    916

    瀏覽量

    31856

原文標題:HDLBits: 在線學(xué)習(xí) SystemVerilog(五)-Problem 19-23

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    verilog硬件描述語言課程講義

    verilog硬件描述語言課程講義
    發(fā)表于 08-06 11:35

    Verilog HDL硬件描述語言

    Verilog HDL硬件描述語言
    發(fā)表于 01-13 14:40

    Verilog_HDL硬件描述語言

    Verilog_HDL硬件描述語言 FPGA的資料
    發(fā)表于 02-26 14:03

    Verilog硬件描述語言描述.

    本書簡要介紹了Verilog硬件描述語言的基礎(chǔ)知識,包括語言的基本內(nèi)容和基本結(jié)構(gòu) ,以及利用該語言在各種層次上對
    發(fā)表于 03-27 23:44 ?101次下載

    VERILOG HDL硬件描述語言

    本書簡要介紹了Verilog硬件描述語言的基礎(chǔ)知識,包括語言的基本內(nèi)容和基本結(jié)構(gòu) ,以及利用該語言在各種層次上對
    發(fā)表于 07-20 11:36 ?0次下載

    Verilog HDL硬件描述語言【書籍

    本書簡要介紹了Verilog 硬件描述語言的基礎(chǔ)知識,包括語言的基本內(nèi)容和基本結(jié)構(gòu),以及利用該語言在各種層次上對
    發(fā)表于 07-02 14:55 ?124次下載

    verilog硬件描述語言課程講義

    verilog硬件描述語言課程講義
    發(fā)表于 05-21 15:01 ?33次下載
    <b class='flag-5'>verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述語言</b>課程講義

    Verilog硬件描述語言參考手冊

    Verilog硬件描述語言參考手冊,Verilog語法內(nèi)容介紹
    發(fā)表于 11-12 17:20 ?0次下載

    Verilog HDL硬件描述語言

    Verilog HDL硬件描述語言 有需要的下來看看
    發(fā)表于 12-29 15:31 ?0次下載

    Verilog硬件描述語言

    VHDL語言編程學(xué)習(xí)Verilog硬件描述語言
    發(fā)表于 09-01 15:27 ?0次下載

    Verilog HDL硬件描述語言

    Verilog HDL硬件描述語言,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-11 11:20 ?11次下載

    基于Verilog硬件描述語言的IEEE標準硬件描述語言資料合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是基于Verilog硬件描述語言的IEEE標準硬件描述語言資料合集免費下載:1995、2001、2005;
    發(fā)表于 06-18 08:00 ?10次下載

    Verilog硬件描述語言的學(xué)習(xí)課件免費下載

    本文檔的主要內(nèi)容詳細介紹的是Verilog硬件描述語言的學(xué)習(xí)課件免費下載。
    發(fā)表于 01-22 12:13 ?17次下載
    <b class='flag-5'>Verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述語言</b>的學(xué)習(xí)課件免費下載

    Verilog硬件描述語言參考手冊免費下載

    Verilog 硬件描述語言參考手冊是根據(jù)IEEE 的標準“Verilog 硬件描述語言參考手
    發(fā)表于 02-05 16:24 ?72次下載
    <b class='flag-5'>Verilog</b><b class='flag-5'>硬件</b><b class='flag-5'>描述語言</b>參考手冊免費下載

    使用Verilog/SystemVerilog硬件描述語言練習(xí)數(shù)字硬件設(shè)計

    HDLBits 是一組小型電路設(shè)計習(xí)題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習(xí)
    的頭像 發(fā)表于 08-31 09:06 ?1497次閱讀