Verilog高手请进,请教一个关于if的问题
程序如下
module a(clk,LED1,LED2,M,N,switch);
input clk;
output LED1,LED2;
integer temp;
input[2:0] M,N;
input switch;
always @(posedge clk)
begin
if(temp==N-1) temp<=0;
else temp<=temp+1;
end if;
end
***************************************************
if(switch==1)
assign LED1=(temp<M)?1:0;
else
assign LED2=(temp<M)?1:0;
***************************************************
endmodule 展开
module a(clk,LED1,LED2,M,N,switch,rst_n);
input clk;
input rst_n;//增加一个异步复位按钮,才符合实际情况
output LED1,LED2;
//integer temp;在语句always中,左边的变量建议为寄存器类型
reg [2:0] temp;
input[2:0] M,N;
input switch;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
temp<=0;
else if(temp==N-1)
temp<=0;
else
temp<=temp+1;
//end if;这句错误,没有这种写法
end
//***************************************************
//条件语句if-else是顺序语句,应该放在“always” 快内,因此你那样写会有错误
//if(switch==1)
//注意,我已经把你的开关融合到下面两个赋值语句中了
assign LED1=switch&(temp<M)?1:0;
//else
assign LED2=~switch&(temp<M)?1:0;
//***************************************************
endmodule
有详细的注释,如果不对的地方还望指正。
我觉得你应该把基础大好,这样才能后续的学习。
附上仿真图。
高手啊 可以仿真!!!非常感谢 如果我的开关有两位 就是控制4个输出还能这样做么?