一段关于一个三位数输入,百位,十分,个位分别输出的代码
时间:10-02
整理:3721RD
点击:
module weifenli(clk,reset,yin,y3,y2,y1);
input clk;
input reset;
input[7:0]yin;
output [7:0]y3;
output [7:0]y2;
output [7:0]y1;
reg[7:0]y3,y2,y1;
reg[7:0]yout1,yout;
always@(posedge clk or posedge reset)
begin
if(reset)
begin
y3=0;
y2=0;
y1=0;
end
else
if(yin>=100)
begin
if((yin>=300)&&(yin<400))
begin
y1=3;
yout=yin-300;
end
else if((yin>=200)&&(yin<300))
begin
y1=2;
yout=yin-200;
end
else if((yin>=100)&&(yin<200))
begin
y1=1;
yout=yin-100;
end
end
else if(yin<100)
begin
begin
y1=0;
yout=yin;
end
if((yout>=90)&&(yout<100))
begin
y2=9;
y3=yout-90;
end
else if((yout>=80)&&(yout<90))
begin
y2=8;
y3=yout-80;
end
else if((yout>=70)&&(yout<80))
begin
y2=7;
y3=yout-70;
end
else if((yout>=60)&&(yout<70))
begin
y2=6;
y3=yout-60;
end
else if((yout>=50)&&(yout<60))
begin
y2=5;
y3=yout-50;
end
else if((yout>=40)&&(yout<50))
begin
y2=4;
y3=yout-40;
end
else if((yout>=30)&&(yout<40))
begin
y2=3;
y3=yout-30;
end
else if((yout>=20)&&(yout<30))
begin
y2=2;
y3=yout-20;
end
else if((yout>=10)&&(yout<20))
begin
y2=1;
y3=yout-10;
end
else if((yout>=0)&&(yout<10))
begin
y2=0;
y3=yout;
end
end
end
endmodule
这段代码功能有点问题,麻烦大神看哈,找出问题在哪里,怎么解决,跪谢
input clk;
input reset;
input[7:0]yin;
output [7:0]y3;
output [7:0]y2;
output [7:0]y1;
reg[7:0]y3,y2,y1;
reg[7:0]yout1,yout;
always@(posedge clk or posedge reset)
begin
if(reset)
begin
y3=0;
y2=0;
y1=0;
end
else
if(yin>=100)
begin
if((yin>=300)&&(yin<400))
begin
y1=3;
yout=yin-300;
end
else if((yin>=200)&&(yin<300))
begin
y1=2;
yout=yin-200;
end
else if((yin>=100)&&(yin<200))
begin
y1=1;
yout=yin-100;
end
end
else if(yin<100)
begin
begin
y1=0;
yout=yin;
end
if((yout>=90)&&(yout<100))
begin
y2=9;
y3=yout-90;
end
else if((yout>=80)&&(yout<90))
begin
y2=8;
y3=yout-80;
end
else if((yout>=70)&&(yout<80))
begin
y2=7;
y3=yout-70;
end
else if((yout>=60)&&(yout<70))
begin
y2=6;
y3=yout-60;
end
else if((yout>=50)&&(yout<60))
begin
y2=5;
y3=yout-50;
end
else if((yout>=40)&&(yout<50))
begin
y2=4;
y3=yout-40;
end
else if((yout>=30)&&(yout<40))
begin
y2=3;
y3=yout-30;
end
else if((yout>=20)&&(yout<30))
begin
y2=2;
y3=yout-20;
end
else if((yout>=10)&&(yout<20))
begin
y2=1;
y3=yout-10;
end
else if((yout>=0)&&(yout<10))
begin
y2=0;
y3=yout;
end
end
end
endmodule
这段代码功能有点问题,麻烦大神看哈,找出问题在哪里,怎么解决,跪谢
当你的yin>=100时,只有y3是正确的,y2,y1是没有执行到的。你把y3,yout放到一个always里面,根据yin的不同给赋值。然后把y2,y1,放到一个always里面,根据yout的值来赋值。
把always@(posedge clk or posedge reset)改成always@(*)就可以了,你把verilog当C语言写了。
可以对100求模啊,然后然后剩下的对10求模,在剩下的就是个位了啊,你这是在列出所有的可能性啊。
