看板 Electronics 關於我們 聯絡資訊
版上的前輩好 小弟最近想實現一個功能 大致上是一個模塊 輸入有clk,與一些switch 是想實現電子鐘 然後可以用switch輸入小時與分鐘 但小弟卡在一個地方整個晚上了 實在不知道要如何改寫這段code module time( clk,out,SW ); input clk; input [9:0] SW; output [16:0] out; reg [31:0] cnt=0; reg [16:0] p1=0; reg [16:0] QH=0; reg [16:0] QM=0; reg load; assign out = p1 ; always@(SW[9] , SW[8])begin //賦值preset if( SW[9]==1 && SW[8]==1 ) //preset hour QH <= (SW[7:0] * 3600); if( SW[9]==0 && SW[8]==1 )//preset min QM <= (SW[7:0] * 60); // SW[9]=1時選擇賦值hour,=0時賦值給min end // SW[8] 的功用為,若為1則把我SW[7:0]給寄存到QM(QH) always@(posedge SW[8])begin load <= 1; end always@(posedge clk)begin if( (p1==17'd86399) && (cnt==32'd5_000_000) )begin//1sec cnt <= 32'b0; p1 <= 17'd0; end else if(load)begin p1 <= p1 +QH+QM; load<=0; end else if(cnt==32'd5_000_000)begin // CLOCK=50Mhz cnt <= 32'b0; p1 <= p1 + 1'b1; end else cnt <= cnt + 1'b1; end endmodule 在compile時出現以下錯誤 Error (10028): Can't resolve multiple constant drivers for net "load" at Lab4_p2.v(72) 小弟想很久,也揣摩過其他寫法但是都無功而返 我覺得這個寫法最為直觀,但Quartus就是不給我compile 錯誤提示應是在說我不能在不同的always裡面給同一個變數改變值 我有嘗試用別的信號,例如再用一個sig 但由於我SW[8]給值後會維持在1 會導致我的load訊號在1與0之間反覆跳,功能還是錯誤的 想請問前輩們這樣的情形我應該要怎樣才好? PS: 給值一定要用Switch , 也就是這個原因導致我沒辦法讓他跳回0 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.142.4.165 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1445103172.A.BDE.html
asanick: 各位前輩好,經過小弟查詢資料得到兩個always不能對同一個 10/18 02:36
asanick: reg給值,但我還是不了解我該如何設計這段程式 10/18 02:37
asanick: 達到我SW[8]往上切的時候給load只有一個時鐘就從1->0 10/18 02:38
asanick: 前輩好,小弟已解決此問題 10/18 02:57
Baneling: combinational logic不建議這樣寫 10/19 16:38