Verilog基礎:寄存器輸出的兩種風格

相關文章

Verilog基礎icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


? ? ? ? Verilog中的寄存器操作一般指的是那些對時鐘沿敏感而且使用非阻塞賦值的操作。例如狀態機中的狀態轉移,實際上就是一種寄存器操作,因為這相當于將下一狀態的組合邏輯連接至寄存器的輸入,如圖一的Moore狀態機所示。

圖1 Moore型狀態機

? ? ? ? 對于這種的寄存器操作,三段式的描述方式清清晰明了地將組合邏輯和寄存器操作分離,所以被廣泛接受的,如下所示。

//第一段,下一狀態組合邏輯
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,狀態轉移時序邏輯
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,輸出組合邏輯
always@(*) beginif(state == ***)out = ***;elseout = ***;
end

? ? ? ? 但對于需要輸出寄存的情況,就可能出現兩種不同的描述寄存器操作的風格,一種是組合邏輯和寄存器操作分離,就像狀態轉移一樣,另一種是將組合邏輯和寄存器操作混合在一起。下面是一個簡單的例子。

//將輸出組合邏輯和輸出寄存分離
//第一段,下一狀態組合邏輯
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,狀態轉移時序邏輯
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,輸出組合邏輯
always@(*) beginif(state == ***)out = ***;elseout = ***;
end//第四段,輸出寄存時序邏輯
always @(posedge clk, negedge rst_n) beginif (!rst_n)     out_r <= ***;		             else out_r <= out;			
end
endmodule
?
//將輸出組合邏輯和輸出寄存融合
//第一段,下一狀態組合邏輯
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,狀態轉移時序邏輯
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,輸出寄存時序邏輯
always @(posedge clk, negedge rst_n) beginif (!rst_n)     out_r <= ***;		             else out_r <= ***;			
end
endmodule

? ? ? ? 對于狀態機簡單的輸出寄存,可以將輸出組合邏輯和輸出寄存融合,比如計數器(對計數器而言狀態就是輸出,所以也可以理解為將狀態轉移也融合進來了)。同時對于一般簡單的寄存器操作比如移位,也可以將輸出組合邏輯和輸出寄存融合。

//組合邏輯和寄存器操作融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 0;elsecnt <= cnt + 1;
end//組合邏輯和寄存器操作不融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 0;elsecnt <= cnt_pre;
assign cnt_pre = cnt + 1;
end//簡單的寄存器操作,組合邏輯和時序邏輯融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)shift <= 0;else if(load)shift <= shift_load;elseshift <= shift << 1;
end//簡單的寄存器操作,組合邏輯和時序邏輯不融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)shift <= 0;else if(load)shift <= shift_load;elseshift <= shift_pre;
endassign shift_pre = shift << 1;

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

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

相關文章

聽GPT 講Rust源代碼--src/tools(10)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_is_empty_from_len.rs 在Rust源代碼中&#xff0c;rust-analyzer是一個Rust語言的IDE插件和代碼分析器。其中&#xff0c;generate_is_empty_from_len.rs是rust-analyzer中的一個處理程序&#x…

終于有人把tcp、http、rpc和grpc總結完整了

隨著微服務的迅速發展&#xff0c;各大互聯網企業也投入到微服務的?使用種。微服務最大的特點是&#xff0c;跨進程、跨服務、跨語言之間的調用&#xff0c;使得我們能夠像調用本地類、函數一樣。當微服務具備該特點&#xff0c;將我們復雜的業務拆分成不同的服務&#xff0c;…

CentOS7安裝Docker,DockerCompose

安裝docker 1、卸載docker 查看是否有舊版本docker docker info首先檢測我們虛擬機是否已經安裝過Docker&#xff0c;如果安裝則需卸載。代碼中“\”符號為換行符&#xff0c;相當于一行內容分為多行&#xff0c;這是檢測docker的各種組件 yum remove docker \docker-clien…

VGG模型

概念&#xff1a; CNN感受野 在卷積神經網絡中&#xff0c;決定某一層輸出結果中的一個元素所對應的輸入層的區域大小&#xff0c;被稱作感受野&#xff08;receptive field&#xff09;。通俗的解釋是&#xff0c;輸出feature map上的一個單元對應輸入層上的區域大小。 VGG…

協同過濾算法springboot+java+ssm高校圖書館圖書借閱管理系統k32vr

課題主要分為四大模塊&#xff1a;即管理員模塊&#xff0c;員工模塊&#xff0c;教師模塊和學生模塊&#xff0c;主要功能包括&#xff1a;首頁&#xff0c;個人中心&#xff0c;員工管理&#xff0c;學生管理&#xff0c;教師管理&#xff0c;圖書分類管理&#xff0c;圖書信…

wsl2 ubuntu上搭建OpenIM

文檔 踩坑 版本要選擇好&#xff0c;不要直接main來跑&#xff0c;目前版本OpenIMServer 有release-v3.3和release-v3.4&#xff0c;對應Chat版本的release-v1.4和release-v1.4。但我跑3.4是有問題的&#xff0c;切到3.3可以跑通。export OPENIM_IP"http://ip:10002"…

HNU計算機結構體系-實驗2:CPU動態指令調度Tomasulo

文章目錄 實驗2 CPU動態指令調度Tomasulo一、實驗目的二、實驗說明三、實驗內容問題1&#xff1a;問題2&#xff1a;問題3&#xff1a;問題4&#xff1a;問題5&#xff1a; 四、思考題問題1&#xff1a;問題2&#xff1a; 五、實驗總結 實驗2 CPU動態指令調度Tomasulo 一、實驗…

【數據挖掘】國科大蘇桂平老師數據庫新技術課程作業 —— 第三次作業

part 1 設計一個學籍管理小系統。系統包含以下信息&#xff1a; 學號、學生姓名、性別、出生日、學生所在系名、學生所在系號、課程名、課程號、課程類型&#xff08;必修、選修、任選&#xff09;、學分、任課教師姓名、教師編號、教師職稱、教師所屬系名、系號、學生所選課…

汽車網絡安全--ISO\SAE 21434解析(一)

目錄 1.標準總覽 2.示例分析 2015年美國黑帽大會,知名網絡安全專家Charlie Miller和Chris Valasek詳細描述了他們是如何在有限距離下通過WiFI入侵到Jeep大切諾基的中控系統,從此關于汽車網絡安全的討論拉開了序幕。 2016 年,ISO 道路車輛技術委員會與 SAE 聯合成立 SC32/…

【算法每日一練]-結構優化(保姆級教程 篇5 樹狀數組)POJ3067日本 #POJ3321蘋果樹 #POJ2352星星

目錄 今天知識點 求交點轉化求逆序對&#xff0c;每次操作都維護一個y點的前綴和 樹的變動轉化成一維數組的變動&#xff0c;利用時間戳將節點轉化成區間 先將y排序&#xff0c;然后每加入一個就點更新求一次前綴和 POJ3067&#xff1a;日本 思路&#xff1a; POJ3321蘋…

案例063:基于微信小程序的傳染病防控宣傳系統

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder …

leetcode系列:反轉鏈表的形象表示

反轉鏈表是一道比較簡單的題&#xff0c;主要考察的是對鏈表數據結構的理解和雙指針應用&#xff0c;比較容易出錯的地方是指針的移動順序。在練習的過程中想到了一個比較形象的表示方法&#xff0c;于是記錄下來。 # Definition for singly-linked list. # class ListNode: #…

地理信息系統概論

地理信息系統概論 第一章導論第二章地理信息系統的數據結構第三章空間數據的處理第四章地理信息系統空間數據庫第五章空間分析的原理與方法第六章地理信息系統的應用模型第七章地理信息系統的設計與評價第八章地理信息系統產品的輸出與設計 第一章導論 數據與信息的關系&#…

Java基礎-java.util.Scanner接收用戶輸入

目錄 1. 導入所需要的jar包2. 編寫代碼運行3. 輸出運行結果 1. 導入所需要的jar包 import java.util.Scanner;2. 編寫代碼運行 public class ScannerDemo {public static void main(String[] args) {/** 使用Scanner接收用戶鍵盤輸入的數據* 1. 導包&#xff1a;告訴程序去JD…

【Python】translate包報錯RuntimeError: generator raised StopIteration

根據網上有些教程&#xff0c;使用translate包翻譯稍微復雜語句的時候&#xff0c;會報錯RuntimeError: generator raised StopIteration 實際測試之后發現&#xff0c;主要是from_lang、to_lang兩個參數的設置有問題&#xff0c;比如有人說中文寫"Chinese"、"Z…

Mysql、Oracle安全項檢查表及操作腳本

軟件開發全資料獲取&#xff1a;點我獲取 Mysql檢查表 Oracle檢查表

【華為OD題庫-073】字符串變換最小字符串-java

題目 題目描述: 給定一個字符串s&#xff0c;最多只能進行一次變換&#xff0c;返回變換后能得到的最小字符串(按照字典序進行比較)。變換規則:交換字符串中任意兩個不同位置的字符。 輸入描述: —串小寫字母組成的字符串s 輸出描述: 按照要求進行變換得到的最小字符串 備注: s…

Anaconda建虛擬環境并在jupyter中打開

1.假設要用yaml格式創建虛擬環境 從開始里打開anaconda powersheel 輸入以下 conda env create -f environment.yaml conda activate env_name activate以下虛擬環境 修改名稱 如果不用yaml也可以用 conda create --name my_first_env python3.6 這個來指定 2.(base)變(…

C語言 位運算符 + 應用

常用的位運算符 按位與 快速判斷整數的奇偶性 奇數的二進制表示的最低位為1&#xff0c;偶數的二進制表示的最低位為0。 int num 9; if (num & 1) {// num 是奇數 } else {// num 是偶數 }按位異或 交換兩個變量的值 int a 5; int b 7; a a ^ b; b a ^ b; a a ^ …

udemy angular decoration 自存

番外 為什么一個ts文件變成了component,因為它使用了components裝飾器 components is just a class,you export it so angular know how to use it 舉例&#xff1a;組件裝飾器 decoration前總是有一個符號 decoration的作用&#xff08;之一&#xff1f;&#xff09; NgModu…