assign連續賦值

2021-05-23 09:09:50 字數 1103 閱讀 3263

一些verilog書上說assign用在連續型賦值的

下面是功能相同但寫法不同的兩段**:

第一段a

module assign_test_a (

clk,

lhold,

lholda

);input clk;

input lhold;

output lholda;

reg lholda;

always @(posedge clk)

if (lhold)

lholda<=lhold;

else

lholda<=0;

endmodule

第二段b

module assign_test_b (

clk,

lhold,

lholda

);input clk;

input lhold;

output lholda;

reg lholda_r;

always @(posedge clk)

if (lhold)

lholda_r<=lhold;

else

lholda_r<=0;

assign  lholda=lholda_r;

endmodule

第一段a分析

第二段b的分析

quartus rtl圖

加入assign風格的綜合結果

xillinx rtl圖

分析:1. 從**角度來看。 a是直接把內部reg訊號做為輸出,因此相對外部來說,外部訊號引腳lholda沒有選擇的連線到reg輸出訊號。 這裡其實暗含了用根導線直接把reg的輸出與lholda連線起來。因此b**就是把這個暗含的明顯化。因此他們的rtl沒有多大區別。

2. 從實用角度來說,這裡的意義比較大。當內部有多個訊號需要輸出,可是輸出引腳只有乙個,那麼這時就可以進行選擇。如下:

assign  lholda= (條件)? (lholda_ra): lholda_rb;  可以巢狀使用。

或者在這種情況下也非常有用。

lholda 與 內部的reg輸出lholda_ra, lholda_rb,…., 存在邏輯函式關係。

TensorFlow的assign賦值用法

tensorflow修改變數值後,需要重新賦值,assign用起來有點小技巧,就是需要需要弄個操作子,執行一下。下面這麼用是不行的 import tensorflow as tf import numpy as np x tf.variable 0 init tf.initialize all va...

JS 連續賦值運算

首先來看一段 1 2 3 var o o.b o alert o.b undefined 以上第二句 o.b o 是乙個連續賦值表示式。那麼在這個過程中究竟發生了什麼呢?在ecmascript 3rd 文件中有關於賦值表示式的解釋 the production assignmentexpressio...

JS基礎 連續賦值

問題 根據js引擎語法解析,會先去從左到右尋找有沒有未宣告的變數,如果有就把該變數提公升至作用域頂部並宣告該變數。那麼恭喜js引擎他找到a.x這個屬性沒有宣告,那麼他會在這個記憶體區宣告乙個x屬性等待賦值!語法解析完成後,開始進行運算 ps 賦值運算 首先將a變數的指標指向了乙個新的記憶體區,那麼a...