作者asanick (EvanWU)
看板Electronics
标题[问题] Verilog ,Can't resove multiple ..疑问
时间Sun Oct 18 01:32:50 2015
版上的前辈好
小弟最近想实现一个功能
大致上是一个模块
输入有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://webptt.com/cn.aspx?n=bbs/Electronics/M.1445103172.A.BDE.html
1F:→ asanick: 各位前辈好,经过小弟查询资料得到两个always不能对同一个 10/18 02:36
2F:→ asanick: reg给值,但我还是不了解我该如何设计这段程式 10/18 02:37
3F:→ asanick: 达到我SW[8]往上切的时候给load只有一个时钟就从1->0 10/18 02:38
4F:→ asanick: 前辈好,小弟已解决此问题 10/18 02:57
5F:推 Baneling: combinational logic不建议这样写 10/19 16:38