一些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...