在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

簡單介紹一下時序和組合邏輯的一些知識

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2022-09-16 09:00 ? 次閱讀

從這一題開始我們將進行過程塊的學習,也就是時序和組合邏輯的一些知識,下面簡單介紹一下這方面知識:

由于數字電路是由用導線連接的邏輯門組成的,因此任何電路都可以表示為module和assign語句的某種組合。然而,有時這并不是描述電路的最方便的方式。過程塊(比如always塊)提供了一種用于替代assign語句描述電路的方法。

對于可綜合硬件,有兩種類型的 always :

組合邏輯:always@(*)
時序邏輯:always@(posedgeclk)

組合always塊相當于assign語句,因此組合電路存在兩種表達方法。選擇使用哪個主要是哪個語法更方便的問題。程序塊內部代碼的語法與外部代碼不同。程序塊具有更豐富的語句集(例如,if-then、case),不能包含連續賦值,但是卻引入了許多新的非直觀的出錯方式。 (程序連續賦值確實存在,但與連續賦值有些不同,并且不可綜合。)

例如,assign和組合always塊描述相同的電路。兩者都創建了相同的組合邏輯塊。每當任何輸入(右側)更改值時,兩者都會重新計算輸出。

assignout1=a&b|c^d;
always@(*)out2=a&b|c^d;

75b60436-3557-11ed-ba43-dac502259ad0.png


對于組合always塊,敏感變量列表總是使用(*)。如果把所有的輸入都列出來也是可以的,但容易出錯的(可能少列出了一個),并且在硬件綜合時會忽略您少列了一個,仍按原電路綜合。 但仿真器將會按少列一個來仿真,這導致了仿真與硬件不匹配。(在SystemVerilog中,使用always_comb)

關于 wire 與 reg 的注意事項:assign 語句的左側必須是net類型(例如,wire),而過程賦值(在 always 塊中)的左側必須是變量類型(例如,reg)。這些類型(wire vs. reg)與合成的硬件無關,只是 Verilog 用作硬件模擬語言時留下的語法。

題目說明

使用 assign 語句和組合 always 塊構建 AND 門。

75b60436-3557-11ed-ba43-dac502259ad0.png

模塊端口聲明

//synthesisverilog_input_versionverilog_2001
moduletop_module(
inputa,
inputb,
outputwireout_assign,
outputregout_alwaysblock
);

題目解析

這個題目重點是使用assign和always兩種方式描述一個AND門,整體難度不大。

moduletop_module(
inputlogica,
inputlogicb,
outputwirelogicout_assign,
outputvarlogicout_alwaysblock
);

assignout_assign=a&b;

always_comb
begin
out_alwaysblock=a&b;
end

endmodule

always_comb程序有很多好處,其中之一便是能自動推斷出完整的敏感列表。該列表是完全完整的,避免了@*推斷不完整敏感列表的極端情況。

769a6022-3557-11ed-ba43-dac502259ad0.png

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

76e39b84-3557-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

Problem 29-Alwaysblock2

阻塞性賦值和非阻塞性賦值

在Verilog中有以下三種賦值方法:

連續賦值(assign x=y;):不能在過程塊內使用;

過程阻塞性賦值(x=y;):只能在過程塊中使用;

過程費阻塞性復制(x<=y):只能在過程塊內使用。

在組合always塊中,使用阻塞性賦值。在時序always塊中,使用非阻塞性賦值。具體為什么對設計硬件用處不大,還需要理解Verilog模擬器如何跟蹤事件(的確是這樣,記住組合用阻塞性,時序用非阻塞性就可以了)。不遵循此規則會導致極難發現非確定性錯誤,并且在仿真和綜合出來的硬件之間存在差異。

題目說明

以三種方式構建異或門,使用assign語句、組合always塊和時序always塊。請注意,時序always塊產生的電路與其他兩個不同:有一個觸發器,因此輸出被延遲。

7727b8b4-3557-11ed-ba43-dac502259ad0.png

模塊端口聲明

//synthesisverilog_input_versionverilog_2001
moduletop_module(
inputclk,
inputa,
inputb,
outputwireout_assign,
outputregout_always_comb,
outputregout_always_ff);

題目解析

這道題難度不大,主要時區分三種方式。

moduletop_module(
inputlogicclk,
inputlogica,
inputlogicb,
outputwirelogicout_assign,
outputlogicout_always_comb,
outputlogicout_always_ff);

assignout_assign=a^b;

always_combbegin
out_always_comb=a^b;
end

always_ff@(posedgeclk)begin
out_always_ff<=?a?^?b;
????end

endmodule



775f175a-3557-11ed-ba43-dac502259ad0.png

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

778b72be-3557-11ed-ba43-dac502259ad0.png

從仿真的波形圖可以看出,out_always_ff比其他兩個輸出延遲了一個時鐘周期,這就是非阻塞性賦值帶來的。

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

這一題就結束了。

Problem 30-Always if

if語句通常創建一個2 對 1 多路復用器,如果條件為真則選擇一個輸入,如果條件為假則選擇另一個輸入。

下面給出了一個基本的if語句和其綜合出來的電路。

always@(*)begin
if(condition)begin
out=x;
end
elsebegin
out=y;
end
end

這與下面使用條件運算符連續賦值的語句是等價的:

assignout=(condition)?x:y;

但是,過程if語句使用不當可能會引入新的錯誤,只有out在所有的條件下都被賦值才會生成正確的組合電路。

題目說明

構建一個在a和b之間進行選擇的 2 對 1 多路復用器。如果sel_b1和sel_b2都為真,則選擇b 。其他情況輸出a。請使用兩種方法作答,一次使用assign賦值,一次使用if語句。

79ce78aa-3557-11ed-ba43-dac502259ad0.png

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputsel_b1,
inputsel_b2,
outputwireout_assign,
outputregout_always);

題目解析

本題考查的是if語句的簡單用法,使用條件運算符作為對比,入門練習題。

moduletop_module(
inputlogica,b,
inputsel_b1,sel_b2,
outputwirelogicout_assign,
outputlogicout_always);

assignout_assign=(sel_b1&sel_b2)?b:a;

always_comb
begin
if(sel_b1&sel_b2)
out_always=b;
else
out_always=a;
end

endmodule

7a00b9fa-3557-11ed-ba43-dac502259ad0.png

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

7a81dcf6-3557-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

Problem 31-Always_if2

常見的錯誤來源:如何避免引入鎖存器

在設計電路時,必須首先具體考慮電路:

1、我想實現一個邏輯門;

2、我想實現一個具有輸入并產生輸出的組合邏輯塊;

3、我想實現一組組合邏輯,緊接著一組觸發器。

不要上來就寫代碼,這樣往往與你想象的電路相差很遠。

7aea6636-3557-11ed-ba43-dac502259ad0.png

if(cpu_overheated)thenshut_off_computer=1;
if(~arrived)thenkeep_driving=~gas_tank_empty;

除了你指定的情況以外,會發生些什么,答案是什么也不會發生,輸出保持不變。而這往往就導致了電路的錯誤,所以說語法正確的代碼不一定能產生合理的電路(組合邏輯+觸發器)。

輸出保持不變,這就意味著電路需要記住當前狀態,從而產生鎖存器。組合邏輯(比如邏輯門)不能記住任何狀態。

題目說明

以下代碼包含創建鎖存器的不正確行為。修復錯誤~

always@(*)begin
if(cpu_overheated)
shut_off_computer=1;
end

always@(*)begin
if(~arrived)
keep_driving=~gas_tank_empty;
end
7aea6636-3557-11ed-ba43-dac502259ad0.png?

模塊端口聲明

moduletop_module(
inputcpu_overheated,
outputregshut_off_computer,
inputarrived,
inputgas_tank_empty,
outputregkeep_driving);

題目解析

這個題目的核心是修復由于各種原因在組合電路中引入的鎖存器代碼,理解了前面說的產生鎖存器的原因,看這個代碼還是比較好找出問題的,盡量補全if語句的條件。

moduletop_module(
inputlogiccpu_overheated,
outputlogicshut_off_computer,
inputlogicarrived,
inputlogicgas_tank_empty,
outputlogickeep_driving
);

always_combbegin
if(cpu_overheated)
shut_off_computer=1;
else
shut_off_computer=0;
end

always_combbegin
if(~arrived)
keep_driving=~gas_tank_empty;
else
keep_driving=0;
end

endmodule


7b597b98-3557-11ed-ba43-dac502259ad0.png

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

7b8f3aa8-3557-11ed-ba43-dac502259ad0.png

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

這一題就結束了。

總結

今天的幾道題就結束了,整體難度不大,逐漸的在學習新知識~




審核編輯:劉清

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

    關注

    14

    文章

    1019

    瀏覽量

    83939
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110397
  • 數字電路
    +關注

    關注

    193

    文章

    1629

    瀏覽量

    80824
收藏 人收藏

    評論

    相關推薦

    簡單認識邏輯電路的用途

    在數字電子的世界里,每個決策、每條指令、每次數據處理,都離不開CMOS邏輯IC的掌控。CMOS邏輯IC大致包括兩種
    的頭像 發表于 11-01 15:44 ?386次閱讀

    邏輯電路芯片-組合邏輯電路芯片-時序邏輯電路芯片

    微型電子元件,在極小的空間內實現了復雜的邏輯功能。邏輯電路芯片根據設計不同,可以分為組合邏輯電路和時序
    發表于 09-30 10:47

    時序邏輯電路有記憶功能嗎

    時序邏輯電路確實具有記憶功能 。這特性是時序邏輯電路與組合
    的頭像 發表于 08-29 10:31 ?861次閱讀

    時序邏輯電路的基本概念、組成、分類及設計方法

    Logic Circuit)是種在數字電路中,其輸出不僅取決于當前輸入,還取決于過去輸入歷史的電路。與組合邏輯電路(Combinational Logic Circuit)不同,組合
    的頭像 發表于 08-28 11:45 ?2401次閱讀

    時序邏輯電路的功能表示方法有哪些

    時序邏輯電路是數字電路中的種重要類型,其特點是電路的輸出不僅取決于當前的輸入,還取決于電路的狀態。時序邏輯電路廣泛應用于計算機、通信、控制
    的頭像 發表于 08-28 11:41 ?865次閱讀

    加法器是時序邏輯電路嗎

    加法器不是時序邏輯電路 ,而是組合邏輯電路的種。時序邏輯
    的頭像 發表于 08-28 11:05 ?705次閱讀

    時序邏輯會產生鎖存器嗎

    時序邏輯電路本身并不直接“產生”鎖存器,但鎖存器是時序邏輯電路中的重要組成部分。時序邏輯電路(S
    的頭像 發表于 08-28 11:03 ?494次閱讀

    組合邏輯電路分析過程的般步驟有哪些

    組合邏輯電路是數字電路中的種,其特點是輸出只依賴于當前的輸入,與電路的歷史無關。組合邏輯電路廣泛應用于計算機、通信、控制等領域。以下是
    的頭像 發表于 08-11 11:30 ?1061次閱讀

    組合邏輯電路設計時應遵循什么原則

    定的原則,以確保電路的性能、可靠性和可維護性。 二、設計原則 功能明確 在設計組合邏輯電路之前,需要明確電路的功能和性能要求。這包括輸入信號的數量、類型、范圍,輸出信號的數量、類型、范圍,以及電路的
    的頭像 發表于 08-11 11:26 ?1622次閱讀

    組合邏輯電路的結構特點是什么?

    組合邏輯電路是種基本的數字電路,它由邏輯門組成,用于實現各種邏輯功能。組合
    的頭像 發表于 08-11 11:14 ?1156次閱讀

    時序邏輯電路包括什么器件組成

    時序邏輯電路是種數字電路,它根據輸入信號和電路內部狀態的變化產生輸出信號。時序邏輯電路廣泛應用于計算機、通信、控制等領域。
    的頭像 發表于 07-30 15:02 ?1401次閱讀

    FPGA 高級設計:時序分析和收斂

    結果當然是要求系統時序滿足設計者提出的要求。 下面舉個最簡單的例子來說明時序分析的基本概念。 假設信號需要從輸入到輸出在FPGA 內部經過一些
    發表于 06-17 17:07

    關于Verilog的一些基本語法

    、always@(邊沿觸發):非阻塞賦值語句,對應時序邏輯電路。G、always@(電平觸發):阻塞賦值語句,對應組合邏輯電路。 注意:
    發表于 05-31 18:31

    細談SolidWorks教育版的一些基礎知識

    SolidWorks教育版是款廣泛應用于工程設計和教育領域的三維建模軟件。它具備直觀易用的操作界面和強大的設計功能,為學生提供了個學習和實踐的平臺。在本文中,我們將詳細探討SolidWorks教育版的一些基礎
    的頭像 發表于 04-01 14:35 ?394次閱讀

    什么是組合邏輯電路和時序邏輯電路?它們之間的區別是什么

    什么是組合邏輯電路和時序邏輯電路?時序邏輯電路和組合
    的頭像 發表于 03-26 16:12 ?3991次閱讀
    主站蜘蛛池模板: 国产小视频在线观看 | 欧美三级一区 | 成熟妇女毛耸耸性视频 | 亚洲乱码一区二区三区在线观看 | 精品亚洲欧美无人区乱码 | 一区二区三区视频免费观看 | 91青草视频 | 国产精品女仆装在线播放 | 免费观看黄a一级视频 | 特黄特级毛片免费视 | 深夜大尺度视频在线观看 | 国产片翁熄系列乱在线视频 | 天堂avwww| 五月天婷婷在线观看高清 | 黄色网址有那些 | 五月丁香六月综合缴清无码 | 日韩三级在线免费观看 | 色婷婷精品大全在线视频 | 欧美.亚洲.日本一区二区三区 | 97在线精品| 国产女人伦码一区二区三区不卡 | 国产理论 | 新版天堂资源中文8在线 | 男女午夜剧场 | 你懂的福利网站 | 国产精品久久久久久久久久妇女 | 午夜毛片福利 | 婷婷六 | 四虎永久网址 | 天堂8中文在线最新版在线 天堂8资源8在线 | 人人做天天爱夜夜爽中字 | 天天插在线视频 | 午夜日韩精品 | 国产玖玖 | 美女扒开尿囗给男人玩的动图 | 一区二区三区在线观看免费 | 国产午夜精品一区二区三区 | 欧美私人网站 | 亚洲一区毛片 | 简单视频在线播放jdav | 国产精品亚洲四区在线观看 |