verilog牛客网刷题代码汇总(上)(1)

简介: 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线优先编码器

1. Verilog快速入门

1. 基础语法

VL1 四选一多路器

`timescale 1ns/1ns
module mux4_1(
    input              [   1:0]         d1,d2,d3,d0                ,
    input              [   1:0]         sel                        ,
    output             [   1:0]         mux_out                     
);
//*************code***********//
/*
reg                    [   1:0]         state                      ;
always @(*) begin
    case (sel)
        2'b00:state = d3;
        2'b01:state = d2;
        2'b11:state = d0;
        2'b10:state = d1;
        default:state = d3;
    endcase
end
assign mux_out = state;
*/
assign mux_out = sel[1]==1?(sel[0]==1?d0:d1):(sel[0]==1?d2:d3);
//*************code***********//
endmodule

VL2 异步复位的串联T触发器

VL2 异步复位的串联T触发器

`timescale 1ns/1ns
module Tff_2 (
    input  wire                         data, clk, rst             ,
    output reg                          q                           
);
reg                                     data1                      ;
always @(posedge clk or negedge rst) begin
    if(!rst) begin
        data1 <= 1'b0;
    end else begin
        if (data) begin
            data1 <= !data1;
        end
        else begin
            data1 <= data1;
        end
    end
end
always @(posedge clk or negedge rst) begin
    if(!rst) begin
        q <= 1'b0;
    end else begin
        if (data1) begin
            q <= !q;
        end else begin
            q <= q;
        end
    end
end
endmodule

LV3 奇偶校验

LV3 奇偶校验

`timescale 1ns/1ns
module odd_sel(
    input              [  31:0]         bus                        ,
    input                               sel                        ,
    output                              check                       
);
//*************code***********//
reg state;
always @(*) begin
    case (sel)
        1'b1:
            if(^bus == 1) begin
                state = 1;
            end
            else begin
                state = 0;
            end
        1'b0:
            if (^bus == 0) begin
                state = 1;
            end 
            else begin
                state = 0;
            end
        default: state = 0;
    endcase
end
assign check = state;
endmodule

VL4 移位运算与乘法

VL4 移位运算与乘法

`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
reg [1:0] state;
reg [7:0] din;
always @(posedge clk or negedge rst) begin
    if(!rst)begin
        out <= 11'b0;
        state <= 2'b00;
        input_grant <= 0;
        din <= 0;
    end    
    else begin
        case (state)
            2'b00:begin
                input_grant <= 1;
                din <= d;
                out <= d;
                //out <= (din<<2) - din;
                state <= 2'b01;
            end
            2'b01: begin
                out <= (din<<2) - din;
                input_grant <= 0;
                state <= 2'b10;
            end
            2'b10:begin
                out <= (din<<3) - din; 
                input_grant <= 0;
                state  <= 2'b11;
            end 
            2'b11: begin
                out <= (din<<3);
                input_grant <= 0;
                state <= 2'b00;
            end
            default:begin
                state <= 2'b00;
                input_grant <= 0;
            end
        endcase
    end
end
endmodule

LV5 位拆分与运算

LV5 位拆分与运算

`timescale 1ns/1ns
module data_cal(
    input                               clk                        ,
    input                               rst                        ,
    input              [  15:0]         d                          ,
    input              [   1:0]         sel                        ,
    output             [   4:0]         out                        ,
    output                              validout                    
);
reg                    [   4:0]         out_map                    ;
reg                    [  15:0]         d_luck                     ;
reg                                     validout_tmp               ;
always @(posedge clk or negedge rst) begin
    if(!rst)begin
        out_map <= 5'd0;
        validout_tmp<=1'b0;
    end
    else begin
        case (sel)
            2'd0: begin
                d_luck <= d;
                validout_tmp<=1'b0;
                out_map <=  5'd0;
            end
            2'd1: begin
                out_map <= d_luck[3:0] + d_luck[7:4];
                validout_tmp<=1'b1;
            end
            2'd2: begin
                out_map <= d_luck[3:0] + d_luck[11:8];
                validout_tmp<=1'b1;
            end
            2'd3: begin
                out_map <= d_luck[3:0] + d_luck[15:12];
                validout_tmp<=1'b1;
            end
            default:begin
                out_map <= 5'd0;
                validout_tmp<=1'b0;
            end
        endcase
    end
end
assign out = out_map;
assign validout = validout_tmp;
endmodule

VL6 多功能数据处理器

VL6 多功能数据处理器

`timescale 1ns/1ns
module data_select(
    input                               clk                        ,
    input                               rst_n                      ,
    input       signed [   7:0]         a                          ,
    input       signed [   7:0]         b                          ,
    input              [   1:0]         select                     ,
    output reg  signed [   8:0]         c                           
);
always @(posedge clk or negedge rst_n)
    if(!rst_n)
        c <= 9'd0;
    else case(select)
    2'b00:  c <= a;
    2'b01:  c <= b;
    2'b10:  c <= a+b;
    2'b11:  c <= a-b;
    default: c <= 9'd0;
    endcase
endmodule

VL7 求两个数的差值

VL7 求两个数的差值

`timescale 1ns/1ns
module data_minus(
    input                               clk                        ,
    input                               rst_n                      ,
    input              [   7:0]         a                          ,
    input              [   7:0]         b                          ,
    output reg         [   8:0]         c                           
);
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        c <= 9'b0;
    end
    else begin
        if (a>b) begin
            c <= a - b;
        end
        else if(a <= b) begin
            c <= b - a;
        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
|
C语言
牛客网Verilog刷题(1)
牛客网Verilog刷题(1)
83 0
|
芯片
牛客网Verilog刷题(2)
牛客网Verilog刷题(2)
105 0
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
|
算法 C语言
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
|
机器学习/深度学习 存储 人工智能
C语言程序设计第五版谭浩强课后答案 第五章习题答案(3-17题)
C语言程序设计第五版谭浩强课后答案 第五章习题答案(3-17题)
|
存储 算法 异构计算
牛客网verilog刷题知识点盘点(75道题的版本)
还有几个坑没填,知识点整理总结自互联网,本人csdn博客搬运
597 0