设为首页 加入收藏

TOP

【牛客】7 计数器&存储器&综合(二)
2023-07-23 13:25:07 】 浏览:110
Tags:牛客 计数器 储器 综合
r
i; generate for(i=0;i<size;i=i+1) assign temp[i] = mul_a[i]?(mul_b<<i):'d0; endgenerate always@(posedge clk or negedge rst_n) begin if(~rst_n)begin adder[0] <= 'd0; adder[1] <= 'd0; mul_out <= 'd0; end else begin adder[0] <= temp[0] + temp[1]; adder[1] <= temp[2] + temp[3]; mul_out <= adder[0] + adder[1]; end end endmodule

VL57 交通灯

又是一道浪费时间的垃圾题目,j简直就是为了满足题目要求硬凑,具体题目细节参考的【收藏】FPGA数字IC基础刷题Verilog代码及讲解(状态机、跨时钟、同步/异步FIFO、DMUX、奇数/小数分频) (qq.com)

这里为了让信号提前一个周期输出,需要使用next_state进行判断.

`timescale 1ns/1ns

module triffic_light
    (
        input rst_n, //异位复位信号,低电平有效
        input clk, //时钟信号
        input pass_request,
        output wire[7:0]clock,
        output reg red,
        output reg yellow,
        output reg green
    );
reg [7:0]cnt;
reg [1:0]state,next_state;
localparam S0=0,S1=1,S2=2,S3=3;
always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
        state <= S0;
    else
        state <= next_state;
end    
always@(*)
begin
    case(state)
    S0:next_state = (cnt==8)?S3:S0;//reset delay
    S1:next_state = (cnt==1)?S3:S1;//green
    S2:next_state = (cnt==1)?S1:S2;//yellow
    S3:next_state = (cnt==1)?S2:S3;//red
    endcase
end
always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
        cnt <= 'd10;
    else begin
            case(state)
            S0:cnt <= (cnt == 8)?10:cnt-1;
            S1:begin
                if(pass_request)
                    cnt <= 10;
                else
                    cnt <= (cnt == 1)?10:cnt-1;
            end
            S2:cnt <= (cnt == 1)?60:cnt-1;
            S3:cnt <= (cnt == 1)?5:cnt-1;
            endcase
    end
end
always @(posedge clk or negedge rst_n)
    if(~rst_n)begin
        red    <= 1'd0;
        yellow <= 1'd0;
        green  <= 1'd0;
    end else begin
        case(next_state)
            S0:begin 
                red    <= 1'd0;
                yellow <= 1'd0;
                green  <= 1'd0;
            end
            S1:begin 
                red    <= 1'd0;
                yellow <= 1'd0;
                green  <= 1'd1;
            end
            S2:begin 
                red    <= 1'd0;
                yellow <= 1'd1;
                green  <= 1'd0;
            end
            S3:begin 
                red    <= 1'd1;
                yellow <= 1'd0;
                green  <= 1'd0;
            end
            default:begin 
                red    <= 1'd0;
                yellow <= 1'd0;
                green  <= 1'd0;
            end
        endcase
    end
assign clock = cnt;
endmodule

VL58 游戏机计费程序

一开始以为充值的那一个周期也会扣钱,后来发现想多了。

`timescale 1ns/1ns

module game_count
    (
        input rst_n, //异位复位信号,低电平有效
        input clk,     //时钟信号
        input [9:0]money,
        input set,
        input boost,
        output reg[9:0]remain,
        output reg yellow,
        output reg red
    );

always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
        remain <= 'd0;
    else begin
        if(set)
            remain <= remain + money;
        else if(boost)
            remain <= (remain<2)?remain:remain-2;
        else
            remain <= (remain<1)?remain:remain-1;
    end
end

always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)begin
        yellow <= 1'b0;
        red <= 1'b0;
    end else begin
        if(remain < 10&&remain>10)
            yellow <= 1'b1;
        else
            yellow <= 1'b0;
        if((remain<2&&boost)||(remain<1&&~boost))
            red <= 1'b1;
        else
            red <= 1'b0;

    end
end
endmodule

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇基于FPGA的RGB灯WS2812B的控制器.. 下一篇「数字IC设计项目」 —— AHB SRA..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目