微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一段关于一个三位数输入,百位,十分,个位分别输出的代码

一段关于一个三位数输入,百位,十分,个位分别输出的代码

时间: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
这段代码功能有点问题,麻烦大神看哈,找出问题在哪里,怎么解决,跪谢

当你的yin>=100时,只有y3是正确的,y2,y1是没有执行到的。你把y3,yout放到一个always里面,根据yin的不同给赋值。然后把y2,y1,放到一个always里面,根据yout的值来赋值。

把always@(posedge clk or posedge reset)改成always@(*)就可以了,你把verilog当C语言写了。

可以对100求模啊,然后然后剩下的对10求模,在剩下的就是个位了啊,你这是在列出所有的可能性啊。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top