功能是:当h posedge到来时,开始计数clk,如果计数到105,r设置为0,如果计数到517,r设置为1;如果数超过600,什么都不做; h是周期性的信号;
module make_counter(h, clk, P);
input wire h;
input wire clk;
output wire P;
reg r=1'b1;
reg[9:0] n=0;
always @(negedge clk)
always @(posedge h)
begin
n=0;
end
begin
if(n<600)
n=n+1'b1;
if(n==106)
r<=1'b0;
else if(n==517)
r<=1'b1;
else
;
end
assign P=r;
endmodule
错误(10170):在main.v(115)附近文本“always”的Verilog HDL语法错误;期待“;”
错误(10170):在文本“begin”附近的main.v(119)处的Verilog HDL语法错误;期待“endmodule”
图像是我想要的。当flag1开始设置n = 0,并计数clk; 当count到flag2时,设置P = 0;当计数到红色箭头时,设置P = 1;
答案 0 :(得分:0)
Buddy你有一些不好的代码,
cnt
而不是n
使用重置,并在声明
时避免赋值module make_counter(h, clk, P);
input wire h;
input wire clk;
output wire P;
wire r;
reg[9:0] n=0;
always @ (posedge clk or posedge h)
begin
if(h & (n < 10'd600)) begin
n <= n + 1'd1;
end else begin
n <= n;
end
end
assign r = (n == 10'd105) ? 1'b0 : ( (n == 10'd517) ? 1'b1 : 1'bx );
assign P = r;
endmodule
你没有提到,如果r
介于0到104和106到516之间,那么n
的值应该是什么?&gt; 517?
我以为它会成为任何东西。
检查并说它适合你