verilog牛客网刷题代码汇总(下)(4)

简介: 1. Verilog快速入门1. 基础语法VL1 四选一多路器VL2 异步复位的串联T触发器LV3 奇偶校验VL4 移位运算与乘法LV5 位拆分与运算VL6 多功能数据处理器VL7 求两个数的差值VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL10 使用函数实现数据大小端转换02 组合逻辑VL11 4位数值比较器电路VL12 4bit超前进位加法器电路VL13 优先编码器电路①VL14 用优先编码器①实现键盘编码电路VL15 优先编码器ⅠVL16 使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

05 存储器

VL53 单端口RAM

VL53 单端口RAM

`timescale 1ns/1ns
module RAM_1port(
    input                               clk                        ,
    input                               rst                        ,
    input                               enb                        ,
    input              [   6:0]         addr                       ,
    input              [   3:0]         w_data                     ,
    output wire        [   3:0]         r_data                      
);
//*************code***********//
reg [3:0] ram_reg [127:0];    //存储宽度为4位,深度为128
reg                    [   3:0]         r_data_ache                ;
integer  i;
always @(posedge clk or negedge rst) begin
    if(!rst) begin
        for (i =0 ; i < 128; i = i + 1) begin
            ram_reg[i] <= 4'b0;
        end
    end else begin
        if(enb) begin
            ram_reg[addr] <= w_data;
        end else begin
            ram_reg[addr] <= ram_reg[addr];
        end
    end
end
assign r_data = enb ? 4'd0 : ram_reg[addr];
//*************code***********//
endmodule

VL54 RAM的简单实现

VL54 RAM的简单实现

`timescale 1ns/1ns
module ram_mod(
    input                               clk                        ,
    input                               rst_n                      ,
    input                               write_en                   ,
    input              [   7:0]         write_addr                 ,
    input              [   3:0]         write_data                 ,
    input                               read_en                    ,
    input              [   7:0]         read_addr                  ,
    output reg         [   3:0]         read_data                   
);
reg [3:0] ram_reg  [127:0];
integer i;
always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    for (i = 0;i<128 ; i = i + 1) begin
            ram_reg[i] <= 4'b0;
        end
        read_data <= 4'd0;
  end else begin
    if(write_en) begin
            ram_reg[write_addr] <= write_data;
        end
        if(read_en) begin
            read_data <= ram_reg[read_addr];
        end
  end
end
endmodule

06 综合

VL55 Johnson Counter

VL55 Johnson Counter

`timescale 1ns/1ns
module JC_counter(
    input                               clk                        ,
    input                               rst_n                      ,
    output reg         [   3:0]         Q                           
);
reg                    [   2:0]         data_cnt                   ;
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        data_cnt <= 3'b0;
    end else begin
        data_cnt <= data_cnt + 1'd1;
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        Q <=  4'd0;
    end else begin
        if (data_cnt <= 4'd3) begin
            Q <= (Q>>1) | 1000;
        end
        else begin
            Q <= (Q>>1);
        end
    end
end
endmodule

VL56 流水线乘法器

VL56 流水线乘法器

`timescale 1ns/1ns
module multi_pipe#(
    parameter size = 4
)(
    input                      clk        ,   
    input                      rst_n       ,
    input   [size-1:0]          mul_a       ,
    input   [size-1:0]          mul_b       ,
    output  reg [size*2-1:0]    mul_out    
);
/********************************************************************/
    reg [7:0]  addr01;
    reg [7:0]  addr23;
    wire [7:0] temp0 ;
    wire [7:0] temp1 ;
    wire [7:0] temp2 ;
    wire [7:0] temp3 ;
    assign temp0 = mul_b[0]? {4'b0, mul_a} : 'd0;
    assign temp1 = mul_b[1]? {3'b0, mul_a, 1'b0} : 'd0;
    assign temp2 = mul_b[2]? {2'b0, mul_a, 2'b0} : 'd0;
    assign temp3 = mul_b[3]? {1'b0, mul_a, 3'b0} : 'd0;
    always @(posedge clk or negedge rst_n) begin 
        if(~rst_n) begin
            addr01  <= 'd0;
            addr23  <= 'd0;
            mul_out <= 'd0;
        end 
        else begin
            addr01 <= temp0 + temp1;
            addr23 <= temp2 + temp3;
            mul_out <= addr01 + addr23;
        end
    end
endmodule

VL57 交通灯

VL57 交通灯

`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
    );
endmodule

VL58 游戏机计费程序

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) begin
       remain <= 'd0;         
    end else begin
        if(set) begin
            remain <= money + remain;
        end
        else if (boost) begin
            if (remain < 'd2) begin
                remain <= 'd0;
            end else begin
                remain <= remain - 'd2;
            end
        end
        else if (!boost) begin
            if (remain < 'd1) begin
                remain <= 'd0;
            end
            else begin
                remain <= remain - 'd1;
            end 
        end
        else begin
            remain <= remain;
        end
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        red <= 1'd0;
    end else begin 
        if(remain < 'd1) begin
            red <= 1'd1;
        end else begin
            red <= 1'd0;
        end
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        yellow <= 1'd0;
    end else begin 
        if(yellow < 'd10 && yellow > 'd0) begin
            yellow <= 1'd1;
        end else begin
            yellow <= 1'd0;
        end
    end
end
endmodule
相关文章
|
7月前
|
C语言
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
120 1
|
7月前
|
C语言
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强
|
算法 C语言
C语言 每日一题 力扣习题 10.19日 day1
C语言 每日一题 力扣习题 10.19日 day1
50 0
|
算法 C语言
C语言 每日一题 牛客网习题 10.20 day2
C语言 每日一题 牛客网习题 10.20 day2
52 0
|
芯片
牛客网Verilog刷题(2)
牛客网Verilog刷题(2)
105 0
|
C语言
牛客网Verilog刷题(1)
牛客网Verilog刷题(1)
83 0
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
|
算法 C语言
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
|
机器学习/深度学习 存储 人工智能
C语言程序设计第五版谭浩强课后答案 第五章习题答案(3-17题)
C语言程序设计第五版谭浩强课后答案 第五章习题答案(3-17题)
|
存储 算法 异构计算
牛客网verilog刷题知识点盘点(75道题的版本)
还有几个坑没填,知识点整理总结自互联网,本人csdn博客搬运
597 0