【HDLBits刷題】Verilog Language——1.Basics

目錄

一、題目與題解

1.Simple wire(簡單導線)

2.Four wires(4線)

3.Inverter(逆變器(非門))?

4.AND gate??(與門)

5.?NOR gate??(或非門)

6.?XNOR gate(異或非(同或)門)

7.Declaring wires(聲明導線)

8.7458 chip( 7458芯片)

二、雜談

1.新的數據類型:wire

2.串聯運算符:{}

3.邏輯運算符

4.同或的表示方法


一、題目與題解

1.Simple wire(簡單導線)

創建一個具有一個 input 和一個 output 的模塊,其行為類似于一條線。

與物理電線不同,Verilog 中的電線(和其他信號)是定向的?。這意味著信息僅沿一個方向流動,從 (通常一個)?流向接收器?(源通常也稱為驅動器?,將值驅動到線路上) 。在 Verilog 的 “continuous assignment” (?assign left_side = right_side;?) 中,右側的信號值被驅動到左側的導線上。賦值是 “continuous” 的,因為即使右側的值發生變化,賦值也會一直繼續。連續分配不是一次性事件。

模塊上的端口也有一個方向(通常是輸入或輸出)。輸入端口由模塊外部的東西驅動,而輸出端口則驅動外部的東西。從模塊內部查看時,輸入端口是驅動器或源,而輸出端口是接收器。

下圖說明了電路的每個部分如何對應于Verilog代碼的每個位。模塊和端口聲明創建電路的黑色部分。您的任務是通過添加要連接到 的語句來創建一條線路(綠色)。開箱即用的部件不是您關心的問題,但您應該知道,通過將測試線束的信號連接到頂部_模塊的端口,可以測試您的電路。

module top_module( input in, output out );assign out = in;
endmodule

2.Four wires(4線)

創建一個具有 3 個輸入和 4 個輸出的模塊,其行為類似于進行以下連接的電線:

a -> w
b -> x
b -> y
c -> z

下圖說明了 circuit 的每個部分如何對應于 Verilog 代碼的每個位。從模塊外部,有三個輸入端口和四個輸出端口。

當您有多個?assign?語句時,它們在代碼中出現的順序無關緊要。與編程語言不同,?assign?語句(“連續賦值”)描述事物之間的連接?,而不是將值從一個事物復制到另一個事物的操作?

現在也許應該澄清一個潛在的混淆來源:這里的綠色箭頭代表電線之間的連接,但本身不是電線。該模塊本身已經聲明了 7 條電線(名為 a、b、c、w、x、y 和 z)。這是因為?input?和?output?聲明實際上聲明了一個連線,除非另有指定。寫入輸入線 a?與寫入 a?相同。因此,assign?語句不是在創建電線,而是在已經存在的 7 條電線之間創建連接。?

module top_module( input a,b,c,output w,x,y,z );assign w = a;assign x = b,y = b;assign z = c;//如果我們確定每個信號的寬度,使用//串聯運算符等效且更短://assign {w,x,y,z}={a,b,b,c};
endmodule

3.Inverter(逆變器(非門))?

創建一個實現 NOT 門的模塊。該電路類似于線,但略有不同。當從電線連接到電線時,我們將實現逆變器(或者"非門")而不是普通電線。使用assign語句。assign語句將持續將in的非轉換為out。

module top_module( input in, output out );assign out = ~in;
endmodule

4.AND gate??(與門)

創建實現 AND 門的模塊。

該電路現在有三條導線(a、b和out)。導線a和b已經具有由輸入端口驅動的值。但wire out目前并不是由任何因素驅動的。寫一個assign語句,用a和b的AND信號輸出。

請注意,該電路與NOT門非常相似,只是多了一個輸入。如果聽起來不一樣,那是因為我已經開始描述信號是被驅動的(已知值由附加到它的某個東西決定)還是不是被某個東西驅動的。輸入線由模塊外部的東西驅動。assign語句將把一個邏輯電平驅動到一條線上。正如您所料,一條導線不能有多個驅動器(如果有,其邏輯級別是多少?),沒有驅動程序的導線將有一個未定義的值(在合成硬件時通常被視為0)。

module top_module( input a, input b, output out );assign out = a & b;
endmodule

5.?NOR gate??(或非門)

創建一個實現或非門的模塊。或非門是輸出反轉的或門。在Verilog中編寫NOR函數時需要兩個運算符。

assign語句用一個值驅動一條線(或者更正式地稱為“網”)。該值可以是任意復雜的函數,只要它是組合函數(即無內存、無隱藏狀態)。assign語句是一種連續賦值,因為每當其任何輸入發生變化時,都會“重新計算”輸出,就像一個簡單的邏輯門一樣

module top_module( input a, input b, output out );assign out = ~(a | b);
endmodule

6.?XNOR gate(異或非(同或)門)

創建一個實現 XNOR 門的模塊。

module top_module( input a, input b, output out );//assign out = a ~^ b;a和b相同輸出0,不同輸出1//assign out = a ^~ b;assign out = ~(a ^ b);
endmodule

7.Declaring wires(聲明導線)

到目前為止,電路已經足夠簡單,以至于 output 是 inputs 的簡單函數。隨著電路變得越來越復雜,您將需要電線將內部組件連接在一起。當你需要使用 wire 時,你應該在 module 的主體中聲明它,在它第一次使用之前的某個地方。(將來,您將遇到更多類型的信號和變量,它們也以相同的方式聲明,但現在,我們將從 type 為?wire?的信號 ) 開始。

module top_module (input in,              // Declare an input wire named "in"output out             // Declare an output wire named "out"
);wire not_in;           // Declare a wire named "not_in"assign out = ~not_in;  // Assign a value to out (create a NOT gate).assign not_in = ~in;   // Assign a value to not_in (create another NOT gate).endmodule   // End of module "top_module"

在上面的模塊中,有三根電線 (?in?,?out?, 和?not_in?),其中兩根已經聲明為模塊的輸入和輸出端口的一部分(這就是為什么你在前面的練習中不需要聲明任何電線的原因)。需要在 module 內部聲明 wire?not_in?。從模塊外部不可見。然后,使用兩個?assign?語句創建兩個 NOT 門。請注意,您首先創建哪個 NOT 門并不重要:您最終仍然會得到相同的電路。

實現以下電路。創建兩條中間線(命名您想要的任何名稱)以將 AND 和 OR 門連接在一起。請注意,饋送 NOT 門的 wire 實際上是 wire?out?,因此您不一定需要在此處聲明第三根 wire 。請注意 wires 是如何由一個 source (gate 的 output) 驅動的,但可以饋送多個 inputs。

如果您遵循圖中的電路結構,則最終應該有四個 assign 語句,因為有四個信號需要賦值。

module top_module (input a,input b,input c,input d,output out,output out_n );wire w1, w2;		// Declare two wires (named w1 and w2)assign w1 = a&b;	// First AND gateassign w2 = c&d;	// Second AND gateassign out = w1|w2;	// OR gate: Feeds both 'out' and the NOT gateassign out_n = ~out;	// NOT gateendmodule

8.7458 chip( 7458芯片)

7458 是一款具有 4 個 AND 門和 2 個 OR 門的芯片。此問題比?7420?稍微復雜一些。

創建與 7458 芯片具有相同功能的模塊。它有 10 個輸入和 2 個輸出。您可以選擇使用?assign?語句來驅動每根輸出線,也可以選擇聲明 (four) 線用作中間信號,其中每根內部線都由其中一個 AND 門的輸出驅動。如需額外練習,請嘗試兩種方式。

module top_module ( input p1a, p1b, p1c, p1d, p1e, p1f,output p1y,input p2a, p2b, p2c, p2d,output p2y );//第一種方法assign p2y = (p2a & p2b) | (p2c & p2d);assign p1y = (p1a & p1c & p1b) | (p1f & p1e & p1d);//第二種方法wire a,b,c,d;assign a = p2a & p2b;assign b = p2c & p2d;assign p2y = a | b;assign c = p1a & p1c & p1b;assign d = p1f & p1e & p1d;assign p1y = c | d;
endmodule

二、雜談

1.新的數據類型:wire

2.串聯運算符:{}

? ? ? ? assign {w, x, y, z} = {a, b, b, c};

? ? ? ? 可實現一對一的賦值

3.邏輯運算符

? ? ? ? &與

? ? ? ? |或

? ? ? ? ~非

? ? ? ? ?^異或

4.同或的表示方法

? ? ? ?~ (a ^ b) == (a ^~ b) ==?(a ~^ b)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81894.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81894.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81894.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言|遞歸求n!

C語言| 函數的遞歸調用 【遞歸求n!】 0!1; 1!1 n! n*(n-1)*(n-2)*(n-3)*...*3*2*1; 【分析過程】 定義一個求n&#xff01;的函數&#xff0c;主函數直接調用 [ Factorial()函數 ] 1 用if語句去實現&#xff0c;把求n!的情況列舉出來 2 if條件有3個&#xff0c;n<0; n0||n…

Android第四次面試總結之Java基礎篇(補充)

一、設計原則高頻面試題&#xff08;附大廠真題解析&#xff09; 1. 單一職責原則&#xff08;SRP&#xff09;在 Android 開發中的應用&#xff08;字節跳動真題&#xff09; 真題&#xff1a;“你在項目中如何體現單一職責原則&#xff1f;舉例說明。”考點&#xff1a;結合…

OpenHarmony GPIO應用開發-LED

學習于&#xff1a; https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-platform-gpio-develop.md https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-platform-gpio-des.md 通過OpenHarmony官方文檔指導可獲知&#xff1a;芯片廠…

XILINX原語之——xpm_fifo_async(異步FIFO靈活設置位寬、深度)

目錄 一、"fwft"模式&#xff08;First-Word-Fall-Through read mode&#xff09; 1、寫FIFO 2、讀FIFO 二、"std"模式&#xff08;standard read mode&#xff09; 1、寫FIFO 2、讀FIFO 調用方式和xpm_fifo_sync基本一致&#xff1a; XILINX原語之…

系統學習算法:動態規劃(斐波那契+路徑問題)

題目一&#xff1a; 思路&#xff1a; 作為動態規劃的第一道題&#xff0c;這個題很有代表性且很簡單&#xff0c;適合入門 先理解題意&#xff0c;很簡單&#xff0c;就是斐波那契數列的加強版&#xff0c;從前兩個數變為前三個數 算法原理&#xff1a; 這五步可以說是所有…

《讓內容“活”起來:Flutter社交應用瀑布流布局的破界實踐》

用戶動態的展示方式如同舞臺的布景&#xff0c;直接影響著觀眾——用戶的體驗。而瀑布流布局&#xff0c;以其獨特的美感和高效的信息展示能力&#xff0c;成為眾多社交應用的心頭好。當我們滑動著Instagram、Pinterest&#xff0c;或是國內熱門的小紅書&#xff0c;那種內容如…

微機控制技術復習【一】

填空題&#xff1a; 簡答題&#xff1a; 1、什么是計算機控制系統?其典型形式有哪些? 2、給出 DDC &#xff08;直接數字控制&#xff09;控制系統結構框圖&#xff0c;并說明各組成部分的作用&#xff1f; 3、采樣周期選擇的理論依據是什么?工程應用中應如何選擇?選擇采樣…

前端學習基礎—VScode環境配置及html基礎知識

作為初學者&#xff0c;一個好的開發環境能極大地提高理解與學習的效率&#xff0c;本文分享我的VScode環境配置方法&#xff0c;涵蓋插件、主題、快捷鍵等&#xff0c;希望能助你快速搭建舒適邊界的前端學習環境。 一、VSCode環境配置 首先找到vscode插件商店&#xff0c;在這…

【一】 基本概念與應用領域【830數字圖像處理】

考綱 文章目錄 1 概念2005甄題【名詞解釋】2008、2012甄題【名詞解釋】可考題【簡答題】可考題【簡答題】 2 應用領域【了解】2.1 伽馬射線成像【核醫學影像】☆2.2 X射線成像2.3 紫外波段成像2.4 可見光和紅外波段成像2.5 微波波段成像2.6 無線電波段成像2.7 電子顯微鏡成像2…

QuecPython錯誤碼匯總

QuecPython中定義的各種錯誤代碼常量 錯誤碼常量錯誤碼釋義QUEC_PY_FAIL-1Generic failure codesQUEC_PY_OK0Quec_py value indicating success (no error)QUEC_PY_EPERM1Operation not permittedQUEC_PY_ENOENT2No such file or directoryQUEC_PY_ESRCH3No such processQUEC_…

C++學習-入門到精通-【4】函數與遞歸入門

C學習-入門到精通-【4】函數與遞歸入門 函數與遞歸入門 C學習-入門到精通-【4】函數與遞歸入門一、 數學庫函數sqrt()ceil()cos()exp()fabs()floor()fmod()log()log10()pow()sin()tan()總結 二、具有多個形參的函數定義三、函數原型、函數簽名和實參的強制類型轉換函數原型函數…

天線測試報告解讀學習

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、無源測試和有源測試二、無源測試報告1.駐波2.回損3.史密斯圓圖4.效率5.增益6.天線方向圖7.天線隔離度8.無源測試總結 三、有源測試報告1.TRP與TIS2.測試指標…

GEC6818蜂鳴器驅動開發

相關知識&#xff1a;Linux設備驅動開發 insmod 編譯好的.ko文件后再運行beep_app.c編譯完成的可執行文件即可使板子蜂鳴。 beep_drv.c: #include <linux/module.h> //包含了加載模塊時需要使用的大量符號和函數聲明 #include <linux/kernel.h> //包含了printk內…

電腦定時管家!Wise Auto Shutdown 深度測評:多任務執行 + 靈活定時

各位電腦小達人&#xff0c;今天給大家介紹一款超厲害的Windows系統定時任務管理工具——Wise Auto Shutdown&#xff01;這玩意兒就像電腦的貼心小管家&#xff0c;能自動執行關機、重啟這些操作&#xff0c;時間設定靈活得很&#xff0c;還有提醒機制呢。下面我給大家好好嘮嘮…

vscode 配置qt

工具&#xff1a;vscode、qttools、qtconfigure Search Mode改成基于cmake的。 # 在項目中指定Qt的路徑 set(Qt5_DIR "/home/jp/qt-everywhere-src-5.12.9/arm-qt/lib/cmake/Qt5") # 用于指定 Qt5 的安裝路徑 find_package(Qt5 REQUIRED COMPONENTS Widgets)這樣就…

基于Boost庫、Jsoncpp、cppjieba、cpp-httplib等構建Boost搜索引擎

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;項目 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 項目背景技術棧和項目環境正排索引和倒排索引數據去標簽與清洗下載數據源去標簽 建立索引構建正排索引構建倒排索引 建立搜索引擎h…

QMK機械鍵盤固件開發指南:從源碼到實踐

QMK機械鍵盤固件開發指南&#xff1a;從源碼到實踐 前言 QMK&#xff08;Quantum Mechanical Keyboard&#xff09;是一款開源的鍵盤固件&#xff0c;支持眾多自定義鍵盤的功能配置。通過QMK&#xff0c;您可以完全掌控鍵盤的每一個按鍵&#xff0c;實現復雜的宏指令、多層按…

WPF 導航

WPF 導航相關控件/機制 控件 / 類說明常用屬性/方法Frame用來承載不同的頁面 (Page) 并在它們之間切換的容器。Source&#xff08;導航到的 URI&#xff09; Navigate()&#xff08;導航方法&#xff09; CanGoBack / GoBack() CanGoForward / GoForward()Page表示一個單獨的可…

時序建模演進之路:從 MLP、RNN 到 LSTM 與 GRU

時序建模演進之路&#xff1a;從 MLP、RNN 到 LSTM 與 GRU 您是否好奇機器如何能像人類一樣理解、生成流暢的文本&#xff0c;甚至是從海量代碼中自動生成文檔&#xff1f;這些自然語言處理 (NLP) 領域的迷人挑戰&#xff0c;其核心在于模型處理和記憶 序列數據 的能力。 然而…

【Redis——數據類型和內部編碼和Redis使用單線程模型的分析】

文章目錄 Redis的數據類型和內部編碼單線程模型的工作過程Redis在處理命令時雖然是一個單線程模型&#xff0c;為啥效率那么高&#xff0c;速度快呢&#xff1f; 總而言之&#xff0c;Redis提供的哈希表容器并不一定真的是真的哈希表&#xff0c;而是在特點的場景下&#xff0c…