freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第10章verilog操作符(編輯修改稿)

2024-08-16 07:00 本頁面
 

【文章內(nèi)容簡介】 arry沒有聲明 過程時(shí)序控制 在過程塊中可以說明過程時(shí)序。過程時(shí)序控制有三類: ? 簡單延時(shí) (delay):延遲指定時(shí)間步后執(zhí)行 ? 邊沿敏感 的時(shí)序控制: @(signal) – 在信號(hào)發(fā)生翻轉(zhuǎn)后執(zhí)行。 – 可以說明信號(hào)有效沿是上升沿 (posedge)還是下降沿 (negedge)。 – 可以用關(guān)鍵字 or指定多個(gè)參數(shù)。 ? 電平敏感 的時(shí)序控制: wait(expr) – 直至 expr值為真時(shí)(非零)才執(zhí)行。 – 若 expr已經(jīng)為真則立即執(zhí)行。 module wait_test。 reg clk, waito, edgeo。 initial begin initial begin clk = 0。edgeo=0。waito=0。end always 10 clk = ~clk。 always @(clk) 2 edgeo = ~edgeo。 always wait(clk) 2 waito = ~waito。 endmodule 簡單延時(shí) 在 test bench中使用簡單延時(shí)( 延時(shí))施加激勵(lì),或在行為模型中模擬實(shí)際延時(shí)。 module muxtwo (out, a, b, sl)。 input a, b, sl。 output out。 reg out。 always @( sl or a or b) if (! sl) 10 out = a。 // 從 a到 out延時(shí) 10個(gè)時(shí)間單位 else 12 out = b。 //從 b到 out延時(shí) 12個(gè)時(shí)間單位 endmodule 在簡單延時(shí)中可以使用模塊參數(shù)parameter: module clock_gen (clk)。 output clk。 reg clk。 parameter cycle = 20。 initial clk = 0。 always (cycle/2) clk = ~clk。 endmodule 邊沿敏感時(shí)序 時(shí)序控制 @可以用在 RTL級(jí)或行為級(jí)組合邏輯或時(shí)序邏輯描述中??梢杂藐P(guān)鍵字 posedge和 negedge限定信號(hào)敏感邊沿。敏感表中可以有多個(gè)信號(hào),用關(guān)鍵字 or連接。 module reg_ adder (out, a, b, clk)。 input clk。 input [2: 0] a, b。 output [3: 0] out。 reg [3: 0] out。 reg [3: 0] sum。 always @( a or b) // 若 a或 b發(fā)生任何變化,執(zhí)行 5 sum = a + b。 always @( negedge clk) // 在 clk下降沿執(zhí)行 out = sum。 endmodule 注 :事件控制符 or和位或操作符 |及邏輯或操作符 ||沒有任何關(guān)系。 wait語句 wait用于行為級(jí)代碼中電平敏感的時(shí)序控制。 下面 的輸出鎖存的加法器的行為描述中,使用了用關(guān)鍵字 or的邊沿敏感時(shí)序以及用 wait語句描述的電平敏感時(shí)序。 module latch_adder (out, a, b, enable)。 input enable。 input [2: 0] a, b。 output [3: 0] out。 reg [3: 0] out。 always @( a or b) begin wait (!enable) // 當(dāng) enable為低電平時(shí)執(zhí)行加法 out = a + b。 end endmodule 注 :綜合工具還不支持 wait語句。 命名事件 (named event) 在行為代碼中定義一個(gè)命名事件可以觸發(fā)一個(gè)活動(dòng)。命名事件不可綜合。 module add_mult (out, a, b)。 input [2: 0] a, b。 output [3: 0] out。 reg [3: 0] out。 //***define events*** event add, mult。 always@ (a or b) if (a b) add。 // *** trigger event *** else mult。 // *** trigger event *** // *** respond to an event trigger *** always @( add) out = a + b。 // *** respond to an event trigger *** always @( mult) out = a * b。 endmodule 在例子中,事件 add和 mult不是端口,但定義為事件,它們沒有對(duì)應(yīng)的硬件實(shí)現(xiàn)。 ? 是一種數(shù)據(jù)類型,能在過程塊中觸發(fā)一個(gè)使能。 ? 在引用前必須聲明 ? 沒有持續(xù)時(shí)間,也不具有任何值 ? 只能在過程塊中觸發(fā)一個(gè)事件。 ? 操作符用來觸發(fā)命名事件。 a大于 b,事件 add被觸發(fā),控制傳遞到等待add的 always塊。 如果 a小于或等于 b,事件 mult被觸發(fā),控制被傳送到等待 mult的 always塊。 行為描述舉例 在上面的例子中發(fā)生下面順序的事件: 1. 等待 set=1, 忽略時(shí)刻 10的 clk的 posedge。 2. 等待下一個(gè) clk的 posedge, 它將在時(shí)刻 30發(fā)生 。 3. 等待 3個(gè)時(shí)間單位 , 在時(shí)刻 33( 30+3) 置 q=1。 4. 等待 10個(gè)時(shí)間單位 , 在時(shí)刻 43( 33+10) 置 q=0。 5. 等待在時(shí)刻 48發(fā)生的 set=0。 6. 等待在時(shí)刻 70發(fā)生且與 clk的上升沿同時(shí)發(fā)生的 set=1。 7. 等待下一個(gè)上升沿 。 時(shí)刻 70的邊沿被忽略 , 因?yàn)榈竭_(dá)該語句時(shí)時(shí)間已經(jīng)過去了 ,如例子所示 , clk=1。 重要內(nèi)容 :在實(shí)際硬件設(shè)計(jì)中,事件 6應(yīng)該被視為一個(gè)競爭( race condition)。在仿真過程中,值的確定倚賴于順序,所以是不可預(yù)測的。這是不推薦的建模類型。 always wait (set) begin @( posedge clk) 3 q = 1。 10 q = 0。 wait (! set)。 end 競爭 RTL描述舉例 module dff (q, qb, d, clk)。 output q, qb。 input d, clk。 reg q, qb。 always @( posedge clk) begin q = d。 qb = ~d。 end endmodule 下面的 RTL例子中只使用單個(gè)邊沿敏感時(shí)序控制。 塊語句 塊語句用來將多個(gè)語句組織在一起 , 使得他們在語法上如同一個(gè)語句 。 塊語句分為兩類: ? 順序塊:語句置于關(guān)鍵字 begin和 end之間 , 塊中的語句以順序方式執(zhí)行 。 ? 并行塊:關(guān)鍵字 fork和 join之間的是并行塊語句 , 塊中的語句并行執(zhí)行 。 ? Fork和 join語句常用于 test bench描述 。 這是因?yàn)榭梢砸黄鸾o出矢量及其絕對(duì)時(shí)間 , 而不必描述所有先前事件的時(shí)間 。 塊語句(續(xù)) ? 在順序塊中 , 語句一條接一條地計(jì)算執(zhí)行 。 ? 在并行塊中 , 所有語句在各自的延遲之后立即計(jì)算執(zhí)行 。 begin 5 a = 3。 5 a = 5。 5 a = 4。 end fork 5 a = 3。 15 a = 4。 10 a = 5。 join 上面的兩個(gè)例子在功能上是等價(jià)的。 Forkjoin例子里的賦值故意打亂順序是為了強(qiáng)調(diào)順序是沒有關(guān)系的。 注意 forkjoin塊是典型的不可綜合語句,并且在一些仿真器時(shí)效率較差。 延遲賦值語句 begin temp= b。 @(posedge clk) a = temp。 end a = @( posedge clk) b。 語法: LHS = timing_ control RHS。 時(shí)序控制延遲的是賦值而不是右邊表達(dá)式的計(jì)算 。 在延遲賦值語句中 RHS表達(dá)式的值都有一個(gè)隱含的臨時(shí)存儲(chǔ) 。 可以用來簡單精確地模擬寄存器交換和移位 。 等價(jià)語句 LHS: Lefthandside RHS: Righthandside 延遲賦值語句 begin a = 5 b。 b = 5 a。 10 $diplay(a, b)。 end fork a = 5 b。 b = 5 a。 10 $diplay(a, b)。 join 在左邊的例子中 , b的值被立即采樣 ( 時(shí)刻 0) , 這個(gè)值在時(shí)刻 5賦給 a。 a的值在時(shí)刻 5被采樣 , 這個(gè)值在時(shí)刻 10賦給 b。 注意 , 另一個(gè)過程塊可能在時(shí)刻 0到時(shí)刻 5之間影響 b的值 , 或在時(shí)刻 5到時(shí)刻 10之間影響 a的值 。 在右邊的例子中 , b和 a的值被立即采樣 ( 時(shí)刻 0) , 保存的值在時(shí)刻 5被賦值給他們各自的目標(biāo) 。 這是一個(gè)安全傳輸 。 注意 , 另一個(gè)過程塊可以在時(shí)刻 0到時(shí)刻 5之間影響 a和 b的值 。 并行語句在同一時(shí)間步發(fā)生 , 但由仿真器在另外一個(gè)時(shí)間執(zhí)行 。 在下面的每個(gè)例子中 , a和 b的值什么時(shí)候被采樣 ? 在下面的每個(gè)例子中 , 什么時(shí)候給 a和 b賦值 ? b值拷貝到 a然后回傳 a和 b值安全交換 非阻塞過程賦值 module swap_vals。 reg a, b, clk。 initial begin a = 0。 b = 1。 clk = 0。 end always 5 clk = ~clk。 always @( posedge clk) begin a = b。 // 非阻塞過程賦值 b = a。 // 交換 a和 b值 end endmodule 阻塞過程賦值執(zhí)行完成后再執(zhí)行在順序塊內(nèi)下一條語句 。 非阻塞賦值不阻塞過程流 , 仿真器讀入一條賦值語句并對(duì)它進(jìn)行調(diào)度之后 ,就可以處理下一條賦值語句 。 若過程塊中的所有賦值都是非阻塞的 , 賦值按兩步進(jìn)行: 1. 仿真器計(jì)算所有 RHS表達(dá)式的值 , 保存結(jié)果 , 并進(jìn)行調(diào)度在時(shí)序控制指定時(shí)間的賦值 。 2. 在經(jīng)過相應(yīng)的延遲后 , 仿真器通過將保存的值賦給 LHS表達(dá)式完成賦值 。 阻塞過程賦值 非阻塞過程賦值 過程賦值有兩類 非阻塞過程賦值(續(xù)) module non_block1。 reg a, b, c, d, e, f。 initial begin // blocking assignments a = 10 1。 // time 10 b = 2 0。 // time 12 c = 4 1。 // time 16 end initial begin // non blocking assignments d = 10 1。 // time 10 e = 2 0。 // time 2 f = 4 1。 // time 4 end initial begin $monitor($ time, a= %b b= %b c= %b d= %b e= %b f= %b, a, b, c, d, e, f)。 100 $finish。 end endmodule 輸出結(jié)果: 0 a= x b= x c= x d= x e= x f = x 2 a= x b= x c= x d= x e= 0 f = x 4 a= x b= x c= x d= x e= 0 f = 1 10 a= 1 b= x c= x d= 1 e= 0 f = 1 12 a= 1 b= 0 c= x d= 1 e= 0 f = 1 16 a= 1 b= 0 c= 1 d= 1 e= 0 f = 1 阻塞與非阻塞賦值語句行為差別舉例 1
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1