1樓:匿名使用者
以分頻器為例,你可以再定義2個變數讓他們分別在時鐘上升和下降沿分頻然後將2個異或值賦給你要的變數
2樓:
一旦遇到這個問題。verilog中的解決方法是兩個變一個。一個always塊只對一個變數賦值。最後將其用組合邏輯將其變為一個訊號。
舉例:always @ (posedge clk or negedge rst)
if (!rst)
cnt1 <= #1 3'd0;
else if (cnt==4)
cnt1 <= #1 3'd0;
else
cnt <= #1 cnt+1;
always @ (negedge clk or negedge rst)
if (!rst)
cnt2 <= #1 4'd0;
else if (cnt==5)
cnt2 <= #1 4'd0;
else
cnt2 <= #1 cnt2 +1;
always @ (cnt1 or cnt2 )
if (cnt1==2)
ckout = 1'b1;
else if (cnt2==4)
ckout = 1'b0;
else
ckout = 1'b1; // logic part to combine the two cnt to one output
你看到了。前兩個是定義了兩個不同沿觸發的時序電路就是計數器。最後一個組合邏輯來將兩個做成一個使能訊號。
這個做法可以做出不同沿觸發的時序使能訊號。但是這麼做出的一個訊號強烈建議不作為高質量時鐘輸出。由於編寫程式風格。所以做為時鐘可能延遲以及抖動都不能作為高質量時鐘的設計。
verilog 如何處理需要在兩個always 中賦值的變數?
3樓:玩世
一旦遇到這個問題。verilog中的解決方法是兩個變一個。一個always塊只對一個變數賦值。最後將其用組合邏輯將其變為一個訊號。
舉例:always @ (posedge clk or negedge rst)if (!rst)cnt1 <= #1 3'd0;
else if (cnt==4)
cnt1 <= #1 3'd0;elsecnt <= #1 cnt+1;
always @ (negedge clk or negedge rst)if (!rst)cnt2 <= #1 4'd0;
else if (cnt==5)
cnt2 <= #1 4'd0;elsecnt2 <= #1 cnt2 +1;
always @ (cnt1 or cnt2 )
if (cnt1==2)
ckout = 1'b1;
else if (cnt2==4)
ckout = 1'b0;elseckout = 1'b1; // logic part to combine the two cnt to one output
你看到了。前兩個是定義了兩個不同沿觸發的時序電路就是計數器。最後一個組合邏輯來將兩個做成一個使能訊號。
這個做法可以做出不同沿觸發的時序使能訊號。但是這麼做出的一個訊號強烈建議不作為高質量時鐘輸出。由於編寫程式風格。所以做為時鐘可能延遲以及抖動都不能作為高質量時鐘的設計。7
verilog 中為什麼不能再兩個always中同時賦值同一引數
4樓:匿名使用者
廢話,硬體是並行處理的關係,兩個硬體同時給一個引數賦值,必然會產生競爭關係,哪怕你的訊號源是截然不同的。如果在某一時刻,同時收到兩個訊號,一個在還在th,一個在ts,你說硬體賦值哪一個?根據墨菲法則,絕對不能在兩個always中同時賦值同一引數
5樓:匿名使用者
這個沒有什麼為什麼,就是不可以。就好像人做事不能分身一樣,你不可能在兩個地方同時做兩件事情。
6樓:匿名使用者
因為那樣是電路不可以實現的,一個always中要進行賦值必須是reg變數,一個reg變數對應在時序邏輯電路里是一個觸發器的輸出,你兩個always模組中對同一個reg變數賦值是綜合不出來的。。。我的理解是這樣。所以寫到一個模組裡吧。
如果還解決不了可以附**出來,我幫你改改。本人菜鳥,多交流。
7樓:
這是語法規定,
在兩個always中同時賦值同一引數,綜合時會報錯
verilog中一個訊號在不同的always中的賦值問題
8樓:
你想啊,always塊實際綜合出來的就是dff,當時鐘上升沿或者下降沿到了,才能把值打過去。如果你在不同的always中對同一個訊號賦值,怎麼綜合?沒見過這種dff吧?
呵呵~!~~~
如果有實現,你就在一個always中設一個flag,另一個always中,通過判斷這個flag來進行賦值,間接進行賦值就行了~~~~~不過得設計好你的時序
有問題在聯絡哈~~~~~
9樓:匿名使用者
我也是在學習中,你仔細看看夏老師的書,有專門講解有關賦值方面的講解。(中級篇的第六講)
兩個always中本身是同時進行的,所以輸出時會產生競爭冒險現象。這是我理解到的。至於怎麼解決我現在還沒那道行。
verilog語言中,如何給變數賦初值,並能保證賦初值的語句與後面的always是順序執行的。
10樓:匿名使用者
不知道你是要做驗證還是設計,如果是驗證的話,不要求可綜合,可以簡單寫成:
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
用狀態機寫的好處就是不用加標誌位了,但是個人覺得沒有必要這樣寫。
能力有限,錯誤請指正
11樓:匿名使用者
你可以加入一個非同步復位的訊號,來進行初始化工作。
一般情況下,模組都應該有一個非同步復位訊號來進行初始化工作。有時候,不進行初始化會造成誤碼,誤操作等情況。
格式如下:
always @ (posedge clk or posedge rst) begin
if (rst) begin
//這裡填初始值
endelse begin
//這裡是你的邏輯
endend
12樓:匿名使用者
initial是初始化時使用的吧?
你可以這樣,先定義變數的位寬,再做別的
always@(觸發條件)
begin
具體語句end
如何處理tcga的資料,如何處理TCGA的資料
首先說下背景,bai我畢論有大量涉 du及到生存曲線分zhi析。針dao 對某個我們已挖內掘到白血病中的差異基因容,利用了tcga上的臨床資料。需要的資料 tcga上的臨床資料。當你下下來時會發現有一大堆。這時需要你做的就是篩選你所需要的。你需要的有 目的基因的表達量 患者生存時間 患者生存 死亡狀...
如何處理受潮牆面,牆面受潮如何處理?
多數情況不需找平牆面 由於膩子都是鹼性,洇水後會返鹼,牆面乾透後容易出現黃色的痕跡,特別是牆面溼 幹交界處,痕跡最為明顯。以前裝修用的膩子可能出現牆面發黴的情況,現在施工多采用抗黴膩子,牆面洇水後一般都不會發黴。修補返鹼和發黴牆面的方法相同,先用普通砂紙將返鹼或發黴的部分打磨掉,然後再重新刷漆。如果...
異地戀要如何處理,如何處理異地戀
你好,異地戀還是要好好處理的,要保持聯絡,保持關心,經常性的互動,異地戀本來就是件很難的事情,還是要好好維護。異地戀的話最重要的就是保持神秘感和新鮮感,這樣對方才有好奇心,不能把自己的所有事情都跟對方說。我覺得兩個人異地戀,早晚也是需要走到一起的,如果兩個人不想分開那麼就應該儘快的要兩個人在一個城市...