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

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

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

assign語(yǔ)句和always語(yǔ)句的用法

科技綠洲 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2024-02-22 16:24 ? 次閱讀

Assign語(yǔ)句和Always語(yǔ)句是在硬件描述語(yǔ)言(HDL)中常用的兩種語(yǔ)句,用于對(duì)數(shù)字電路建模和設(shè)計(jì)。Assign語(yǔ)句用于連續(xù)賦值,而Always語(yǔ)句用于時(shí)序邏輯建模。本文將詳細(xì)探討這兩種語(yǔ)句的用法和功能。

一、Assign語(yǔ)句

  1. Assign語(yǔ)句的定義和語(yǔ)法

Assign語(yǔ)句用于在HDL中連續(xù)賦值,它允許在設(shè)計(jì)中為信號(hào)或變量分配一個(gè)值。Assign語(yǔ)句的語(yǔ)法如下:

assign <信號(hào)或變量> = <表達(dá)式>;

其中,"<信號(hào)或變量>"是要賦值的信號(hào)或變量名,"<表達(dá)式>"是要賦給該信號(hào)或變量的值。

  1. Assign語(yǔ)句的應(yīng)用場(chǎng)景

Assign語(yǔ)句通常用于組合邏輯電路的建模,其中輸出信號(hào)的值只取決于輸入信號(hào)的當(dāng)前值,而不依賴(lài)于時(shí)鐘信號(hào)或觸發(fā)器。

例如,在HDL中建模一個(gè)全加器的組合邏輯如下:

module full_adder (
input a, b, cin,
output sum, cout
);
assign sum = a ^ b ^ cin;
assign cout = (a & b) | (cin & (a ^ b));
endmodule;

在上述例子中,Assign語(yǔ)句被用來(lái)計(jì)算full_adder模塊的輸出信號(hào)sum和cout,根據(jù)輸入信號(hào)a、b和進(jìn)位信號(hào)cin的值來(lái)決定。

  1. Assign語(yǔ)句的特點(diǎn)

Assign語(yǔ)句具有以下幾個(gè)特點(diǎn):

  • Assign語(yǔ)句是在硬件描述語(yǔ)言中的連續(xù)賦值語(yǔ)句,即每當(dāng)輸入信號(hào)發(fā)生變化時(shí),輸出信號(hào)會(huì)立即根據(jù)新的輸入值進(jìn)行重新計(jì)算。
  • Assign語(yǔ)句的右側(cè)必須是一個(gè)合法的表達(dá)式,可以包含常量、信號(hào)或變量,以及基本的邏輯運(yùn)算和算術(shù)運(yùn)算符。
  • Assign語(yǔ)句的左側(cè)必須是一個(gè)輸出信號(hào)或變量,這意味著它不能被另一個(gè)語(yǔ)句重新分配或修改。

二、Always語(yǔ)句

  1. Always語(yǔ)句的定義和語(yǔ)法

Always語(yǔ)句用于描述時(shí)序邏輯,即根據(jù)時(shí)鐘信號(hào)或觸發(fā)器的邊沿來(lái)決定信號(hào)或變量的行為。Always語(yǔ)句的語(yǔ)法如下:

always @( <敏感信號(hào)列表> )
<語(yǔ)句塊>

其中,"<敏感信號(hào)列表>"指定在語(yǔ)句塊中發(fā)生變化時(shí)需要觸發(fā)執(zhí)行,多個(gè)信號(hào)用逗號(hào)分隔。

  1. Always語(yǔ)句的應(yīng)用場(chǎng)景

Always語(yǔ)句通常用于順序邏輯電路的建模,其中輸出信號(hào)的值取決于輸入信號(hào)的當(dāng)前值和先前的狀態(tài)。

例如,在HDL中建模一個(gè)簡(jiǎn)單的時(shí)鐘計(jì)數(shù)器如下:

module counter (
input clk, reset,
output reg [3:0] count
);
always @(posedge clk or posedge reset) begin
if (reset)
count <= 0;
else
count <= count + 1;
end
endmodule;

在上述例子中,Always語(yǔ)句被用來(lái)描述計(jì)數(shù)器模塊的行為。當(dāng)時(shí)鐘信號(hào)clk的上升沿到來(lái)時(shí),計(jì)數(shù)器的值會(huì)增加1。當(dāng)復(fù)位信號(hào)reset到來(lái)時(shí),計(jì)數(shù)器的值會(huì)被重置為0。

  1. Always語(yǔ)句的特點(diǎn)

Always語(yǔ)句具有以下幾個(gè)特點(diǎn):

  • Always語(yǔ)句是在HDL中描述時(shí)序邏輯的關(guān)鍵語(yǔ)句,用于模擬時(shí)鐘信號(hào)上升沿或下降沿的觸發(fā)行為。
  • Always語(yǔ)句中的敏感信號(hào)列表用于指定在觸發(fā)信號(hào)發(fā)生變化時(shí)需要執(zhí)行語(yǔ)句塊。敏感信號(hào)可以是時(shí)鐘信號(hào)的上升沿(posedge)或下降沿(negedge),也可以是其他信號(hào)。
  • Always語(yǔ)句中的語(yǔ)句塊用于描述在觸發(fā)事件發(fā)生時(shí)需要執(zhí)行的動(dòng)作和邏輯。語(yǔ)句塊可以包含條件語(yǔ)句、循環(huán)語(yǔ)句和其他賦值語(yǔ)句等。

綜上所述,Assign語(yǔ)句和Always語(yǔ)句是HDL中常用的兩種語(yǔ)句,用于連續(xù)賦值和時(shí)序邏輯建模。Assign語(yǔ)句適用于組合邏輯電路,輸出信號(hào)的值立即根據(jù)輸入信號(hào)的值進(jìn)行計(jì)算。Always語(yǔ)句適用于順序邏輯電路,輸出信號(hào)的值取決于輸入信號(hào)的當(dāng)前值和先前的狀態(tài),根據(jù)時(shí)鐘信號(hào)或觸發(fā)器的觸發(fā)來(lái)決定執(zhí)行行為。這兩種語(yǔ)句在數(shù)字電路的建模和設(shè)計(jì)中起著重要作用,能夠幫助工程師更好地描述和分析電路的行為和性能。

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

    關(guān)注

    11

    文章

    3328

    瀏覽量

    66224
  • 建模
    +關(guān)注

    關(guān)注

    1

    文章

    305

    瀏覽量

    60775
  • 數(shù)字電路
    +關(guān)注

    關(guān)注

    193

    文章

    1605

    瀏覽量

    80625
  • always塊結(jié)構(gòu)

    關(guān)注

    0

    文章

    2

    瀏覽量

    2118
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句詳解

    在C語(yǔ)言中,有三種條件判斷結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句。
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    C語(yǔ)言中if<b class='flag-5'>語(yǔ)句</b>、if-else<b class='flag-5'>語(yǔ)句</b>和switch<b class='flag-5'>語(yǔ)句</b>詳解

    Rust的 match 語(yǔ)句用法

    執(zhí)行不同的代碼,這在處理復(fù)雜的邏輯時(shí)非常有用。在本教程中,我們將深入了解 Rust 的 match 語(yǔ)句,包括基礎(chǔ)用法、進(jìn)階用法和實(shí)踐經(jīng)驗(yàn)等方面。 基礎(chǔ)用法 match
    的頭像 發(fā)表于 09-19 17:08 ?916次閱讀

    關(guān)于always語(yǔ)句的問(wèn)題

    1個(gè)Verilog HDL語(yǔ)言,有很多個(gè)always語(yǔ)句,這些always語(yǔ)句是并行一起執(zhí)行,還是按照先后順序執(zhí)行?
    發(fā)表于 06-29 10:01

    關(guān)于verilog 語(yǔ)句中變量類(lèi)型的確定,例:請(qǐng)指出下面幾條語(yǔ)句中變量的類(lèi)型:8.1) assign A=B; 8.2) always #1 Count=C+1;

    8)請(qǐng)指出下面幾條語(yǔ)句中變量的類(lèi)型。8.1) assign A=B;8.2) always #1 Count=C+1;標(biāo)準(zhǔn)答案:A(wire)B(wire/reg)Count(reg)C(wire
    發(fā)表于 01-06 17:20

    signaltap II綜合assign語(yǔ)句的問(wèn)題

    直接將輸入到FPGA的晶振時(shí)鐘信號(hào)clk,利用語(yǔ)句assign clk_out = clk將其輸出給其他的IC使用,在用signaltap II仿真的時(shí)候,看不到clk_out的波形(一直為低電平)。請(qǐng)問(wèn)一下,這是什么原因?
    發(fā)表于 08-10 14:55

    verilog中g(shù)enerate語(yǔ)句用法分享

    、assign、always、task等語(yǔ)句或者模塊進(jìn)行復(fù)制。在generate語(yǔ)句中可以引入if-else和case語(yǔ)句,根據(jù)條件不同產(chǎn)生
    發(fā)表于 12-23 16:59

    assign語(yǔ)句出錯(cuò)。

    就是一個(gè)普通的assign語(yǔ)句:conv1_mem_wr_enn是wire類(lèi)型,conv1_mem_wr_en是reg類(lèi)型,但是當(dāng)conv1_mem_wr_en有值的時(shí)候,conv1_mem_wr_enn卻沒(méi)有值。
    發(fā)表于 12-03 21:04

    開(kāi)關(guān)語(yǔ)句和循環(huán)語(yǔ)句

    switch/case開(kāi)關(guān)語(yǔ)句是一種多分支選擇語(yǔ)句,是用來(lái)實(shí)現(xiàn)多方向條件分支的語(yǔ)句。雖然從理論上講采用條件語(yǔ)句也可以實(shí)現(xiàn)多方向條件分支,但是當(dāng)分支較多時(shí)會(huì)使條件
    發(fā)表于 07-15 14:26 ?18次下載

    generate語(yǔ)句的基本概念與用法

    生成語(yǔ)句(GENERATE)是一種可以建立重復(fù)結(jié)構(gòu)或者是在多個(gè)模塊的表示形式之間進(jìn)行選擇的語(yǔ)句。由于生成語(yǔ)句可以用來(lái)產(chǎn)生多個(gè)相同的結(jié)構(gòu),因此使用生成語(yǔ)句就可以避免多段相同結(jié)構(gòu)的VHDL
    的頭像 發(fā)表于 11-21 07:08 ?5898次閱讀

    SQL的經(jīng)典語(yǔ)句用法詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SQL的經(jīng)典語(yǔ)句用法詳細(xì)說(shuō)明資料免費(fèi)下載
    發(fā)表于 10-22 16:11 ?5次下載

    initial和always兩者的關(guān)系分析

    兩者的關(guān)系 一個(gè)程序塊可以有多個(gè)initial和always過(guò)程塊。每個(gè)initial和always說(shuō)明語(yǔ)句在仿真的一開(kāi)始同時(shí)立即開(kāi)始執(zhí)行;initial語(yǔ)句只執(zhí)行一次,而
    的頭像 發(fā)表于 11-24 14:48 ?5745次閱讀

    verilog中的initial語(yǔ)句說(shuō)明

    解釋verilog HDL中的initial語(yǔ)句用法。
    發(fā)表于 05-31 09:11 ?0次下載

    SystemVerilog中的always語(yǔ)句

    always”關(guān)鍵字意味著這個(gè)語(yǔ)句塊“總是”一直執(zhí)行。大多數(shù)時(shí)候“always”后面跟一個(gè)邊沿事件或者延遲。
    的頭像 發(fā)表于 12-06 09:47 ?2467次閱讀

    什么是SystemVerilog-決策語(yǔ)句-if-else語(yǔ)句?

    決策語(yǔ)句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語(yǔ)句。SystemVerilog有兩個(gè)主要的決策語(yǔ)句:if…else語(yǔ)句和case
    的頭像 發(fā)表于 02-09 14:15 ?1175次閱讀
    什么是SystemVerilog-決策<b class='flag-5'>語(yǔ)句</b>-if-else<b class='flag-5'>語(yǔ)句</b>?

    Verilog中的If語(yǔ)句和case語(yǔ)句介紹

    我們?cè)谏弦黄恼轮幸呀?jīng)看到了如何使用程序塊(例如 always 塊來(lái)編寫(xiě)按順序執(zhí)行的 verilog 代碼。 我們還可以在程序塊中使用許多語(yǔ)句來(lái)控制在我們的verilog設(shè)計(jì)中信號(hào)賦值的方式
    的頭像 發(fā)表于 05-11 15:37 ?4564次閱讀
    Verilog中的If<b class='flag-5'>語(yǔ)句</b>和case<b class='flag-5'>語(yǔ)句</b>介紹