色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

HDLBits: 在線學習SystemVerilog(三)-Problem 10-14

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-08-24 14:58 ? 次閱讀

HDLBits: 在線學習 SystemVerilog(三)-Problem 10-14

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

網址如下:

https://hdlbits.01xz.net/

關于HDLBits的Verilog實現可以查看下面專欄:

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

縮略詞索引

  • SV:SystemVerilog

向量

從這個題目到后面八道題目左右是關于向量的,所以我們先回顧一下向量。

SystemVerilog有兩種類型的數組:壓縮數組和非壓縮數組。壓縮數組是連續存儲的位的集合,通常稱為向量。非壓縮數組是網絡或變量的集合。

集合中的每個網絡或變量稱為數組元素。未壓縮數組的每個元素的類型、數據類型和向量大小都完全相同。每個未壓縮的數組元素可以獨立于其他元素存儲;這些元素不需要連續存儲。軟件工具,如仿真器和綜合編譯器,可以以工具認為最佳的任何形式組織未壓縮數組的存儲。

未壓縮數組的基本聲明語法為:

e53342b6-235e-11ed-ba43-dac502259ad0.png

數組的維度定義了數組可以存儲的元素總數。未壓縮的數組可以用任意數量的維度聲明,每個維度存儲指定數量的元素。聲明數組維度有兩種編碼樣式:顯式地址和數組大小。

顯式地址樣式指定方括號之間數組維度的起始地址和結束地址,格式為:

e53e3716-235e-11ed-ba43-dac502259ad0.png

Start_address 和 end_address可以是任何整數值,數組可以以地址0、地址512或被建模硬件所需的任何地址開始。起始地址和結束地址之間的范圍表示數組維度的大小(元素數)。

數組大小樣式定義要存儲在方括號中的元素數(類似于C語言數組聲明樣式)。

[size]

使用array_size樣式,起始地址始終為0,結束地址始終為size-1

以下是一些未壓縮的數組聲明示例:

e55bfbf2-235e-11ed-ba43-dac502259ad0.png

前面的mem聲明是16位logic變量的一維數組。一維陣列有時被稱為內存陣列,因為它通常用于仿真硬件內存設備(如RAMROM)的存儲。

訪問數組元素

可以使用數組索引引用未壓縮數組的每個元素,索引緊跟在數組名稱之后,并且位于方括號中,多維數組需要多組方括號才能從數組中選擇單個元素:

e5823c54-235e-11ed-ba43-dac502259ad0.png

數組索引也可以是網絡或變量的值,如下一個示例所示:

e5a3885a-235e-11ed-ba43-dac502259ad0.png

復制數組(陣列)

如果兩個數組(陣列)具有相同的布局,則可以使用賦值語句將一個未壓縮的數組(陣列)復制到另一個未壓縮的數組(陣列)。也就是說,這兩個數組(陣列)必須存儲相同向量大小的相同數據類型,必須具有相同的維度數,并且每個維度的大小都相同-

數組(陣列)復制會將源數組(賦值的右側)的每個元素復制到目標數組(陣列)(賦值的左側)中相應的元素。兩個數組(陣列)的索引編號不需要相同。數組(陣列)的布局和類型必須完全匹配。

e5be36aa-235e-11ed-ba43-dac502259ad0.png

與復制數組(陣列)的方式類似,如果兩個切片的布局相同,則可以將數組(陣列)的一部分(稱為數組(陣列)切片)復制到另一個數組(陣列)的切片。切片是數組(陣列)一維內的一個或多個連續編號的元素。

在成為SystemVerilog之前,最初的Verilog語言將對數組(陣列)的訪問限制為一次只能訪問數組中的一個元素。不允許對數組(陣列)的多個元素進行數組(陣列)復制和讀/寫操作。

數組列表賦值

可以為未壓縮的數組或數組的一個片段分配一個值列表,這些值包含在每個數組維度的’{and}大括號之間。

e5db2594-235e-11ed-ba43-dac502259ad0.png

列表語法類似于在C中為數組指定值列表,但在大括號前添加了撇號使用’-“作為開頭分隔符”表明,所包含的值是表達式列表,而不是SystemVerilog連接運算符(后面會詳細介紹)。

還可以使用嵌套列表為多維數組分配值列表。嵌套的列表集必須與數組的維度完全匹配。

e5fc3fcc-235e-11ed-ba43-dac502259ad0.png

此數組分配相當于以下各項的單獨分配:

e620419c-235e-11ed-ba43-dac502259ad0.png

通過指定默認值,可以為未壓縮數組的所有元素指定相同的值。默認值是使用

e62c0bee-235e-11ed-ba43-dac502259ad0.png

指定的,如以下代碼段所示:

e64788ce-235e-11ed-ba43-dac502259ad0.png

數組元素的位選擇和部分選擇

可以從數組元素向量中選擇一位或一組位。必須首先選擇數組的單個元素,然后進行位選擇或部分選擇。

e66bfc22-235e-11ed-ba43-dac502259ad0.png

通過端口將數組傳遞給任務和函數。任何類型和任意數量的未壓縮數組都可以通過模塊端口傳遞,也可以傳遞到任務和函數參數。端口或任務/函數形式參數也必須聲明為數組,端口或參數數組必須與要傳遞的數組具有相同的布局(與數組復制的規則相同)。

e68f2f8a-235e-11ed-ba43-dac502259ad0.png

最初的Verilog語言只允許簡單的向量通過模塊端口,或傳遞到任務或函數參數。要傳遞上述示例中表數組的值,需要256個端口,數組的每個元素一個端口。

Problem 10-Vector0

題目說明

構造一個電路,擁有 1 個 3 bit 位寬的輸入端口,4 個輸出端口。其中一個輸出端口直接輸出輸入的向量,剩下 3 個輸出端口分別各自輸出 3 bit 中的 1 bit。

e6b53d24-235e-11ed-ba43-dac502259ad0.png
圖片來自 HDLBits

這個題目的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分,其中箭頭上的小斜杠旁邊的數字代表該向量(總線)的位寬,用于將向量同 wire 信號區別開來。

模塊端口聲明

moduletop_module(
inputwire[2:0]vec,
outputwire[2:0]outv,
outputwireo2,
outputwireo1,
outputwireo0);

題目解析

這個題目重點是向量的選取和賦值,在文章最前面已經介紹過了,大家仔細看過應該很好理解。

moduletop_module(
inputlogic[2:0]vec,
outputlogic[2:0]outv,
outputlogico2,
outputlogico1,
outputlogico0
);

assignoutv=vec;
assigno0=vec[0];
assigno1=vec[1];
assigno2=vec[2];

endmodule
e6cec280-235e-11ed-ba43-dac502259ad0.png

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

e6f197f6-235e-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

Problem 11-Vector1

題目說明

16 位輸入信號分別輸出 高 8 位 和低 8 位。

模塊端口聲明

`default_nettypenone//Disableimplicitnets.Reducessometypesofbugs.
moduletop_module(
inputwire[15:0]in,
outputwire[7:0]out_hi,
outputwire[7:0]out_lo);
通過添加`default_nettype none 宏定義會關閉隱式聲明功能,那么這樣一來,使用未聲明的變量就會變成一個 Error 而不再只是 Warning。

題目解析

這道題難度不大主要是向量的選擇,但是要掌握的知識很多,這題前面由很多這方面的知識點,包括壓縮數組和非壓縮數組,隱式轉換等,建議大家在做題前仔細閱讀題目前的知識點。

也可以查看下面的文章:

https://zhuanlan.zhihu.com/p/57452966

`default_nettypenone//Disableimplicitnets.Reducessometypesofbugs.
moduletop_module(
inputwirelogic[15:0]in,
outputvarlogic[7:0]out_hi,
outputvarlogic[7:0]out_lo);

assignout_hi=in[15:8];
assignout_lo=in[7:0];
endmodule

e71d5c60-235e-11ed-ba43-dac502259ad0.png

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

e73be392-235e-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

Problem 12-Vector2

題目說明

一個 32 位的向量可以看做由 4 個字節組成(bits[31:24],[23:16],等等)。構建一個電路,將輸入向量的字節順序顛倒,也就是字節序大小端轉換。

如:

AaaaaaaaBbbbbbbbCcccccccDddddddd => DdddddddCcccccccBbbbbbbbAaaaaaaa

模塊端口聲明

moduletop_module(
input[31:0]in,
output[31:0]out);

題目解析

還是在聯系向量的提取和賦值。

moduletop_module(
inputlogic[31:0]in,
outputlogic[31:0]out
);


assignout[31:24]=in[7:0];
assignout[23:16]=in[15:8];
assignout[15:8]=in[23:16];
assignout[7:0]=in[31:24];

endmodule
e76e6ed4-235e-11ed-ba43-dac502259ad0.png

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

e78ddc4c-235e-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

PS:下面的答案也是對的

assignout={in[7-:8],in[15-:8],in[23-:8],in[31-:8]};

可以自行查找知識學習上面的寫法。

Problem 13-Vectorgates

題目說明

a,b是兩個 3bit 寬的輸入變量,要求輸出 a,b 逐位或,a,b 邏輯或以及 a,b 按位取反的結果,其中 b 在高位。

e79f01d4-235e-11ed-ba43-dac502259ad0.png
圖片來自 HDLBits

問題的核心就是上面的圖片,模塊和端口已經被定義好了,黑色的框圖以及箭頭代表模塊和端口。我們需要做的工作是完成圖中綠色的部分。

模塊端口聲明

moduletop_module(
input[2:0]a,
input[2:0]b,
output[2:0]out_or_bitwise,
outputout_or_logical,
output[5:0]out_not
);

題目解析

這個題目還是挺繞的,難度不是很大,理解題目就能寫出來,這里除了上一個題目的向量提取和賦值以外,還由一個知識點-邏輯求反運算符(!)和按位反轉運算符(~)之間的區別~

之前簡單介紹了以下,這次就詳細介紹,后續就不展開說了。

應注意不要混淆邏輯求反運算符(!)以及按位反轉運算符(~)。求反運算符對其操作數執行真/假求值,并返回表示真、假或未知結果的1位值。按位反轉運算符對操作數的每一位(補碼)執行邏輯反轉,并返回與操作數相同位寬的值。

在某些操作中,這些操作的結果恰好相同,但在其他操作中,它們返回的值非常不同。當運算符與決策語句一起被錯誤使用時,這種差異可能導致錯誤代碼。考慮下面的例子:

e7b981da-235e-11ed-ba43-dac502259ad0.png

前面代碼片段的最后兩行之所以不同,是因為這兩個運算符的工作方式不同——邏輯求反運算符(!)通過將兩位相加或相減,對2位選擇執行真/假計算,然后反轉1位結果,按位反轉運算符(~)只反轉2位選擇向量的每一位的值,并返回2位結果。if語句然后對2位向量進行真/假測試,該向量的計算結果為真,因為反轉后的值仍有一位設置為1。

最佳實踐指南5-1
使用按位反轉運算符反轉值的位,不要使用按位反轉運算符對邏輯求反運算符求反。相反,使用邏輯求反運算符來否定真/假測試的結果。不要使用邏輯求反運算符反轉值。
最佳實踐指南5-2
僅使用邏輯求反運算符求反來測試標量(1位)值,而不是 對向量執行真/假測試。

如果向量的任何位為1,邏輯運算將返回true,這可能會導致在測試特定位時出現設計錯誤。計算向量值時,使用等式或關系運算符測試可接受的值。

moduletop_module(
inputlogic[2:0]a,
inputlogic[2:0]b,
outputlogic[2:0]out_or_bitwise,
outputlogicout_or_logical,
outputlogic[5:0]out_not
);
assignout_or_bitwise=a|b;
assignout_or_logical=a||b;
assignout_not={~b,~a};
endmodule


e7e0c876-235e-11ed-ba43-dac502259ad0.png

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

e817f486-235e-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

Problem 14-Gates4

題目說明

分別構建一個 4 輸入與門,或門以及異或門。

模塊端口聲明

moduletop_module(
input[3:0]in,
outputout_and,
outputout_or,
outputout_xor
);

題目解析

這一題的關鍵是多輸入與、或以及異或門的實現,學過數電的化難度就不是很大了。

e84d17f6-235e-11ed-ba43-dac502259ad0.png
moduletop_module(
inputlogic[3:0]in,
outputlogicout_and,
outputlogicout_or,
outputlogicout_xor
);
assignout_and=∈
assignout_or=|in;
assignout_xor=^in;

endmodule

或者

moduletop_module(
inputlogic[3:0]in,
outputlogicout_and,
outputlogicout_or,
outputlogicout_xor
);
assignout_and=in[0]&in[1]&in[2]&in[3];
assignout_or=in[0]|in[1]|in[2]|in[3];
assignout_xor=in[0]^in[1]^in[2]^in[3];;

endmodule

第二種方式更易于理解,第一種方式就是上面的按位操作符,可以翻看上面的說明。

e87953ac-235e-11ed-ba43-dac502259ad0.pnge8957d98-235e-11ed-ba43-dac502259ad0.png

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

e8af6f78-235e-11ed-ba43-dac502259ad0.png

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

總結

今天的5道題就結束了,整體難度不大,后面的題目難度會越來越大~

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

代碼鏈接:

https://github.com/suisuisi/SystemVerilog/tree/main/SystemVerilogHDLBits

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110259
  • 向量
    +關注

    關注

    0

    文章

    55

    瀏覽量

    11687
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26001

原文標題:HDLBits: 在線學習 SystemVerilog(三)-Problem 10-14

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    KMPHM在線監測平臺實現設備高效管理#在線監測#振動監測#振動在線監測

    在線監測
    KM預測性維護專家
    發布于 :2024年12月24日 13:34:35

    TSW14J10 FMC-USB轉接卡用戶指南

    電子發燒友網站提供《TSW14J10 FMC-USB轉接卡用戶指南.pdf》資料免費下載
    發表于 12-09 14:31 ?0次下載
    TSW<b class='flag-5'>14J10</b> FMC-USB轉接卡用戶指南

    淺談10kV高壓開關柜在線測溫技術以及選型

    隨著時代的發展,越來越多的設備逐漸走向智能化,變電站也是如此。在智能化變電站中,分析其基本結構以及基本運行方式,進而能實現10kV高壓開關柜在線測溫技術的投入使用。本文在這前提下,主要介紹10kV高壓開關柜
    的頭像 發表于 11-19 15:12 ?264次閱讀
    淺談<b class='flag-5'>10</b>kV高壓開關柜<b class='flag-5'>在線</b>測溫技術以及選型

    賽盛在線平臺疑問解答系列(二)

    02賽盛在線平臺疑問解答系列(二)sesOnlineSES前言賽盛技術于2024年10月17日隆重發布了最新產品《賽盛在線學習及工具應用平臺》,引起了廣大朋友的熱切關注。特別是平臺中的
    的頭像 發表于 11-09 01:06 ?201次閱讀
    賽盛<b class='flag-5'>在線</b>平臺疑問解答系列(二)

    KM振動在線監測系統助力設備煥新升級#振動在線監測#振動監測#在線監測

    在線監測
    KM預測性維護專家
    發布于 :2024年10月23日 14:59:48

    賽盛EMC在線學習平臺:揭秘學習寶典&amp;amp;工具秘籍!

    的江河,邀您共赴一個嶄新的學習紀元——“賽盛在線學習及工具應用”平臺,期待10月17日晚19:00與您線上一起見證這重要的時刻。01直播背景SESOnline企業提
    的頭像 發表于 10-11 08:03 ?869次閱讀
    賽盛EMC<b class='flag-5'>在線</b><b class='flag-5'>學習</b>平臺:揭秘<b class='flag-5'>學習</b>寶典&amp;amp;工具秘籍!

    星電子將在線舉辦晶圓代工論壇

    星電子宣布,將于10月24日在中國北京、日本東京和德國慕尼黑地同時在線舉辦2024年星晶圓代工論壇及
    的頭像 發表于 10-10 16:46 ?286次閱讀

    KMPHM振動在線監測助力企業輕裝上陣#振動在線監測 #在線監測 #振動監測

    在線監測
    KM預測性維護專家
    發布于 :2024年09月29日 15:17:03

    PXIe模塊:任意波形發生器,±10V電壓輸出,14bit分辨率

    支持±10V寬幅電壓輸出;支持14bit分辨率;
    的頭像 發表于 08-30 11:58 ?422次閱讀
    PXIe模塊:任意波形發生器,±<b class='flag-5'>10</b>V電壓輸出,<b class='flag-5'>14</b>bit分辨率

    Verilog testbench問題求助

    這是我在HDLbits網站上做到的一道題,是testbench,請問這個代碼為什么input都是低電平0?我設置的時鐘就是周期10ns,占空比50%的時鐘信號啊?怎么會出現這種情況......
    發表于 07-21 11:14

    桿塔傾斜在線監測

    在線監測
    jf_96960730
    發布于 :2024年07月02日 14:38:06

    低功率施密特-格逆變器SN74AUP3G14數據表

    電子發燒友網站提供《低功率施密特-格逆變器SN74AUP3G14數據表.pdf》資料免費下載
    發表于 05-07 10:53 ?0次下載
    低功率<b class='flag-5'>三</b>施密特-<b class='flag-5'>三</b>格逆變器SN74AUP3G<b class='flag-5'>14</b>數據表

    微軟提醒:Windows 10將于2025年1014日停止支持

    微軟曾于 2020 年 1 月 14 日宣布,對 Windows 的支持將結束。由于缺乏安全更新、軟件更新以及技術支持,用戶的電腦可能面臨更大的病毒和惡意軟件威脅。因此,微軟強烈推薦使用 Windows 10 以獲取最新的安全防護。
    的頭像 發表于 04-12 14:40 ?1133次閱讀

    IEEE 1800-2023 SystemVerilog新版本正式發布了!

    2024年3月初,在美國硅谷舉辦的DVCon2024上,IEEE-SA和Accellera聯合宣布通過IEEE Get Program可以免費獲取IEEE 1800-2023 SystemVerilog語言參考手冊。
    的頭像 發表于 03-20 13:52 ?1822次閱讀

    在Vivado Synthesis中怎么使用SystemVerilog接口連接邏輯呢?

    SystemVerilog 接口的開發旨在讓設計中層級之間的連接變得更加輕松容易。 您可以把這類接口看作是多個模塊共有的引腳集合。
    的頭像 發表于 03-04 15:25 ?1007次閱讀
    在Vivado Synthesis中怎么使用<b class='flag-5'>SystemVerilog</b>接口連接邏輯呢?
    主站蜘蛛池模板: 国产精品无码亚洲区艳妇 | www国产av偷拍在线播放 | 北条麻妃のレズナンパ | 久久国产精品二区99 | 中文字幕视频在线免费观看 | 久久综合网久久综合 | 亚洲色婷婷久久精品AV蜜桃 | 老少配xxxxx欧美 | 午夜精品久久久久久久99蜜桃 | 美女大本营| 亚洲精品久久YY5099 | 国产又粗又黄又爽的大片 | 成在线人免费视频 | 国产欧美二区综合 | 精品午夜中文字幕熟女人妻在线 | 最近中文字幕2019国语4 | 摥管专用动态图399期 | 亚洲视频在线免费看 | 国产亚洲日韩欧美视频 | 在教室轮流被澡高H林萌 | 97国内精品久久久久久久影视 | 欧美亚洲日韩国码在线观看 | 亚洲va久久久久 | 久久久精品免费视频 | 99热成人精品国产免男男 | 国产99视频精品一区 | 青青热久久综合网伊人 | 久久热最新网站获取3 | 日本一二三区视频在线 | 国产日韩成人内射视频 | 国产精品99久久久久久AV下载 | 亚洲AV综合99一二三四区 | 国产精品外围在线观看 | 精品久久久无码21P发布 | 亚洲成A人片在线观看中文不卡 | 伊人久久大香网 | 少妇两个奶头喷出奶水了怎么办 | 十二月综合缴缴情 | 国产精品2020观看久久 | 北条麻妃のレズナンパ | 二级特黄绝大片免费视频大片 |