1樓:丁香娛
reg型變數能在定義的時候直接賦值,這跟綜合工具有關,一般不建議將這樣的**直接綜合而是僅僅**用。
不用按reset 鍵也能賦值,是因為你的硬體有一個上電覆位電容,就是但凡剛啟動,都會自動復位。
2樓:匿名使用者
1.reg型別的不可以直接賦值的,一般在always塊中進行賦值。
2.有上電覆位的。
3樓:匿名使用者
求可綜合,可以簡單寫成:
always@ (posedge a)
begin
@ (negedge b)
c<=...;
end如果要想可綜合的話,需要用狀態機類似的概念,
即設一個標誌位,當a上升沿來是,把它賦值為1,
當它為1且b下降沿來時,給c賦值,並將它賦值回0:
並且,如果a,b不是時鐘的話,不推薦使用posedge的寫法
採用下面的方法比較好:
reg a_dly,b_dly; //a,b的1始終delay訊號
wire a_pos,b_pos; //a,b的上升沿抓取訊號
assign a_pos = a & !a_dly;
assign b_pos = b & !b_dly;
reg flag;//標誌位
always@(posedge clk or posedge rst)
begin
if(rst) begin
a_pos <= 1'b0;
b_pos <= 1'b0;
endelse begin
a_pos <= a;
b_pos <= b;
endend
always@(posedge clk or posedge rst)
begin
if(rst)
flag <= 1'b0;
else if(a_pos)
flag <= 1'b1;
else if(b_pos)
flag <= 1'b0;
endalways@(posedge clk)
begin
if(flag & b_pos)
c<=....
end把flag賦值回為0很重要,不然邏輯有問題。
用3段狀態機寫就是
parameter idle = 2'h0;
parameter wait_b_pos = 2'h1;
parameter get_c = 2'h2;
reg [1:0] cs; //current state
reg [1:0] ns; //next state
//1段 狀態轉換
always@(posedge clk or posedge rst)
begin
if(rst)
cs <= idle;
else
cs <= ns;
end//2段 狀態遷移
always@(a_pos or b_pos or cs or ns)
begin
ns = xx; //設定ns為xx
case(cs)
idle: begin
if(a_pos) ns = wait_b_pos;//用阻塞賦值
else ns = idle;
endwait_b_pos:begin
if(b_pos) ns = get_c;
else ns = wait_b_pos;
endget_c:begin
ns = idle;
enddefault:;
endcase
end//3段 賦值
always@(posedge clk or posedge rst)
begin
if(rst)
c<=1'b0;
else begin
if(ns == get_c)
c <= .....;
endend
用狀態機寫的好處就是不用加標誌位了,但是個人覺得沒有必要這樣寫。
能力有限,錯誤請指正
4樓:
不能,可不可以把完整的程式,發給我看下!!
verilog中的reg型變數,wire型變數初值是多少
5樓:單詞用記嗎
reg型變數需要賦初值,否則會在reset前是x,具體值要看具體的設計,reg [7:0] a='h0;wire最好不要賦初值,賦值會和assign造成多驅動的問題,從而產生x,就是wire a=0;assign a=b;那麼會在b=1的時候a的波形是x。若是後面不用assign賦值是沒問題的(以上屬於個人觀點)
6樓:匿名使用者
reg型是x,如果如果是reg型需要給他們賦初值才行,wire一般是不需要的
7樓:旗語彤潘漫
a、b**時是紅線;上板時不定,一般情況下是0。需要給其賦初值可以定義時賦值,如rega=
1;或者always塊中賦值
為什麼在verilog中要定義wire
有幾種情況變數需要定義成wire。第一。assign 語句 例如 reg a,b wire and result assign and result a b 你可以試試把wire定義成reg。綜合器會報錯。第二。元件例化時候的輸出必須用wire 例如 wire dout ram u ram out ...
verilog中頂層模組例項引用多個模組時埠怎麼連線
假定sub module1和sub module2是已經定義好的兩個子模組,top是頂層。那麼子模組之間的連線可以之間用wire連線。頂層的輸入輸出也用wire連線進到子模組中。這是一般的,當然也有特殊的,比如雙向io等。module top in1,out1 input in1 output ou...
在verilog中,模組例項化能用在always嗎
死神吧日語帝 在不同的地方使用同一個基本模組是很常見的事,這樣可以避免重複的 以加法器為例,比如你的加法器是adder,你需要在不同的地方使用它,那麼可以這樣例項化 adder adder 1 clk clk rst rst in a a1 in b b1 sum out s1 adder adde...