明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 148628|回复: 0

关于Verilog的一些提问

[复制链接]

1

主题

1

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2021-6-14 10:08:47 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
    大二学生,基于FPGA设计了一个简化的21点游戏。但是综合后出现了两百多个warning,不知道怎么解决,想让大佬指出错误。还有就是数码管的约束文件怎么编写,也想问一下
Verilog程序如下:
module black_jack(
    input start,                                  //开始游戏按钮
    input add,                                   //摸牌按钮
    input stop,                                 //停止摸牌按钮
    output  reg win,                                //胜利输出
    output  reg lose,                               //失败输出
    output  reg dogfall,                             //平局输出
    output  reg [6:0]nownumber1,                   //摸牌十位大小
    output  reg [6:0]nownumber0,                    //摸牌个位大小
    output  reg [6:0]totalnumber1,                 //玩家总数十位大小
    output  reg [6:0]totalnumber0,                 //玩家总数个位大小
    output  reg  [6:0]bankernumber1,                   //庄家牌十位大小
    output  reg [6:0]bankernumber0                    //庄家牌个位大小
    );
    reg [1:0]player;
    reg new;
    reg total;
    reg [1:0]banker;
    reg a1,b1,c1,d1,e1,f1;
    always@(negedge start)
begin  
    player[0] = 0;
    player[1] = 0;
    banker[0] = 0;
    banker[1] = 0;
    total = 0;
    new = 0;
    a1 = 0;
    b1 = 0;
    c1 = 0;
    d1 = 0;
    e1 = 0;
    f1 = 0;  
    dogfall = 0;
    win = 0;
    lose = 0;
    nownumber1 = 7'b0000000;
    nownumber0 = 7'b0000000;
    totalnumber1 = 7'b0000000;
    totalnumber0 = 7'b0000000;
    bankernumber1 = 7'b0000000;
    bankernumber0 = 7'b0000000;                                   
    player[0] = 2+{$random}%(11-2+1);             //玩家发的第一张手牌
    player[1] = 2+{$random}%(11-2+1);             //玩家发的第二张手牌
    banker[0] = 7+{$random}%(11-7+1);             //庄家的第一张手牌
    banker[1] = 7+{$random}%(11-7+1);             //庄家的第二张手牌
    total = player[1] + player[0];
end                //玩家手牌的总和
    //将玩家手牌和显示出来的方式
always@(total)
begin
    if(total >= 30)                          //手牌和大于等于30时
    begin
            a1 = 3;
            b1 = total - 30;
    end
    else if(total<30&&total>=20)              //手牌和大于等于20时
        begin
            a1 = 2;
            b1 = total - 20;
        end
    else if(total<20&&total>=10)            //手牌和小于20但大于等于10时
        begin
            a1 = 1;
            b1 = total-10;
        end        
    else                                  //手牌和小于10时
    begin
        a1 = 0;
        b1 = total;
    end
end
always@(banker)
begin
    if(banker[0] + banker[1] >= 20)                          //手牌和大于等于20时
    begin
            e1 = 2;
            f1 = banker[0] + banker[1] - 20;
    end
    else if((banker[0] + banker[1])<20&&(banker[0] + banker[1])>=10)            //手牌和小于20但大于等于10时
        begin
            e1 = 1;
            f1 = (banker[0] + banker[1])-10;
        end        
    else                                  //手牌和小于10时
    begin
        e1 = 0;
        f1 = (banker[0] + banker[1]);
    end
end            
always@(a1)                                     //数码管显示玩家总和手牌十位
begin
    case(a1)
    'd0:totalnumber1 = 7'b1111110;
    'd1:totalnumber1 = 7'b0110000;
    'd2:totalnumber1 = 7'b1101101;
    'd3:totalnumber1 = 7'b1111001;
    default:totalnumber1 = 7'bx;
    endcase
end
always@(b1)                                     //数码管显示玩家总和手牌个位
begin
    case(b1)
    'd0:totalnumber0 = 7'b1111110;
    'd1:totalnumber0 = 7'b0110000;
    'd2:totalnumber0 = 7'b1101101;
    'd3:totalnumber0 = 7'b1111001;
    'd4:totalnumber0 = 7'b0110011;
    'd5:totalnumber0 = 7'b1011011;
    'd6:totalnumber0 = 7'b1011111;
    'd7:totalnumber0 = 7'b1110000;
    'd8:totalnumber0 = 7'b1111111;
    'd9:totalnumber0 = 7'b1111011;
    default:totalnumber0 = 7'bx;
    endcase
end
always@(negedge add)                        //添加新牌
begin
    new = 2+{$random}%(11-2+1);
    total = total + new;
end
always@(new)                              //分出新牌的个位和十位
begin
    if(new>=10)
    begin
        c1 = 1;
        d1 = new - 10;
    end
    else
    begin
        c1 = 0;
        d1 = new;
    end   
end
always@(c1)                          //数码管显示新牌的十位
begin
    case(c1)
    'd0:nownumber1 = 7'b1111110;
    'd1:nownumber1 = 7'b0110000;
    default:nownumber1 = 7'bx;
    endcase
end
always@(d1)                              //数码管显示新牌的个位
begin
    case(d1)
    'd0:nownumber0 = 7'b1111110;
    'd1:nownumber0 = 7'b0110000;
    'd2:nownumber0 = 7'b1101101;
    'd3:nownumber0 = 7'b1111001;
    'd4:nownumber0 = 7'b0110011;
    'd5:nownumber0 = 7'b1011011;
    'd6:nownumber0 = 7'b1011111;
    'd7:nownumber0 = 7'b1110000;
    'd8:nownumber0 = 7'b1111111;
    'd9:nownumber0 = 7'b1111011;
    default:nownumber0 = 7'bx;
    endcase
end

always@(negedge stop)                     //玩家停止摸牌
begin
    case(e1)                             //显示出庄家的总和的十位数
        'd0:bankernumber1 = 7'b1111110;
        'd1:bankernumber1 = 7'b0110000;
        'd2:bankernumber1 = 7'b1101101;
        default:bankernumber1 = 7'bx;
    endcase
    case(f1)                             //显示出庄家总和的个位数
        'd0:bankernumber0 = 7'b1111110;
        'd1:bankernumber0 = 7'b0110000;
        'd2:bankernumber0 = 7'b1101101;
        'd3:bankernumber0 = 7'b1111001;
        'd4:bankernumber0 = 7'b0110011;
        'd5:bankernumber0 = 7'b1011011;
        'd6:bankernumber0 = 7'b1011111;
        'd7:bankernumber0 = 7'b1110000;
        'd8:bankernumber0 = 7'b1111111;
        'd9:bankernumber0 = 7'b1111011;
        default:bankernumber0 = 7'bx;
    endcase
    begin                                             //比较大小,判断输赢
    if((total>21&&(banker[0] + banker[1])>21)||(total<=21&&(banker[0]+banker[1]<=21)&&(total == (banker[0]+banker[1]))))
    dogfall = 1;                                       //两者都大于21或者两者一样大,输出平局
    else if(total>banker[0] + banker[1])                       //玩家大,输出获胜
    win = 1;
    else                                                  //玩家小,输出失败
    lose =1;
   end     

end   
endmodule

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-4-20 06:19 , Processed in 0.049457 second(s), 19 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表