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

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

VL47 格雷码计数器

VL47 格雷码计数器

`timescale 1ns/1ns
module gray_counter(
    input                               clk                        ,
    input                               rst_n                      ,
    output reg         [   3:0]         gray_out                    
);
reg                    [   3:0]         binary_cnt                 ;
reg                                     flag                       ;
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        flag <= 1'd0;
    end
    else begin
        flag <= ~flag;
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        binary_cnt <= 1'd0;
    end else begin
        if (flag == 1'd1) begin
            binary_cnt <= binary_cnt + 1'd1;
        end else begin
            binary_cnt <= binary_cnt;
        end
    end
end
always @(*) begin
    gray_out <= binary_cnt ^ (binary_cnt >> 1);
end
endmodule

VL48 多bit MUX同步器

VL48 多bit MUX同步器

`timescale 1ns/1ns
module mux(
  input         clk_a , 
  input         clk_b ,   
  input         arstn ,
  input       brstn   ,
  input   [3:0] data_in ,
  input               data_en ,
  output reg  [3:0]   dataout
);
endmodule

VL49 脉冲同步电路

VL49 脉冲同步电路

`timescale 1ns/1ns
module pulse_detect(
    input                               clk_fast                   ,
    input                               clk_slow                   ,
    input                               rst_n                      ,
    input                               data_in                    ,
    output                              dataout                     
);
reg                                     src_state                  ;
reg                                     src_state_d0               ;
reg                                     src_state_d1               ;
reg                                     src_state_d2               ;
//原时钟域下脉冲信号转变为电平信号
always @(posedge clk_fast or negedge rst_n) begin
    if(!rst_n)
        src_state <= 1'b0;
    else
        src_state <= data_in ^ src_state;                               //通过异或门做处理
end
always @(posedge clk_slow  or negedge rst_n) begin
    if (!rst_n) begin
        src_state_d0 <= 1'b0;
        src_state_d1 <= 1'b0;
        src_state_d2 <= 1'b0;
    end else begin
        src_state_d0 <= src_state;
        src_state_d1 <= src_state_d0;
        src_state_d2 <= src_state_d1;
    end
end
//边沿检测产生新的脉冲
assign dataout = src_state_d1 ^ src_state_d2;
endmodule

04 计数器

VL50 简易秒表

VL50 简易秒表

`timescale 1ns/1ns
module count_module(
    input                               clk                        ,
    input                               rst_n                      ,
    output reg         [   5:0]         second                     ,
    output reg         [   5:0]         minute                      
    );
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        second <= 'd0;
        //minute <= 'd0;
    end else begin
        if(second == 6'd60) begin
            second <= 1'd1;
        end else begin
            second <= second + 1'd1;
        end
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        minute <= 1'd0;
    end else begin
        if (second == 6'd60) begin
            minute <= minute + 1'd1;
        end
        if (minute == 6'd60) begin
            minute <= 1'd0;
        end
end
end
endmodule

VL51 可置位计数器

VL51 可置位计数器

`timescale 1ns/1ns
module count_module(
    input                               clk                        ,
    input                               rst_n                      ,
    input                               set                        ,
    input              [   3:0]         set_num                    ,
    output reg         [   3:0]         number                     ,
    output reg                          zero                        
    );
reg                    [   3:0]         data_cnt                   ;
//定义计数器
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        data_cnt <= 'd0;
    end else begin
        if(set == 1'd1) begin
            data_cnt <= set_num;
        end
            data_cnt <= data_cnt + 1'd1;
    end
end
//
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        zero <= 1'd0;
    end else begin
        if (data_cnt == 1'd0) begin
            zero <= 1'd1;
        end else begin
            zero <= 1'd0;
        end        
    end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        number <=4'd0;
    end else begin
        number <= data_cnt;
    end
end
endmodule

VL52 加减计数器

VL52 加减计数器

`timescale 1ns/1ns
module count_module(
    input                               clk                        ,
    input                               rst_n                      ,
    input                               mode                       ,
    output reg         [   3:0]         number                     ,
    output reg                          zero                        
    );
reg                    [   3:0]         data_cnt                   ;
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        data_cnt <= 4'd0;
    end else begin
        if(mode == 1'd1) begin
            if(data_cnt == 4'd9) begin
                data_cnt <= 1'd0;
            end else begin
                data_cnt <= data_cnt + 1'd1;
            end
        end
        else if(mode == 1'd0) begin
            if (data_cnt == 4'd0) begin
                data_cnt <= 4'd9;
            end else begin
            data_cnt <= data_cnt - 1'd1;
        end
    end
end
end
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        number <= 4'd0;
    end else begin
        number <= data_cnt;
    end
end
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        zero <= 1'd0;
    end else begin
        if(data_cnt ==  1'd0) begin
            zero <= 1'd1;
        end else begin
            zero <= 1'd0;
        end
    end
end
endmodule
相关文章
|
2月前
|
存储 编译器 C语言
【C语言刷题每日一题#牛客网BC107】矩阵转置
【C语言刷题每日一题#牛客网BC107】矩阵转置
|
3月前
|
存储 算法 C语言
C语言初学者超详细习题库1(含题目以及代码讲解)
C语言初学者超详细习题库1(含题目以及代码讲解)
64 1
|
8月前
|
算法 C语言
C语言 每日一题 牛客网习题 10.20 day2
C语言 每日一题 牛客网习题 10.20 day2
40 0
|
9月前
|
人工智能 算法 机器人
迷宫问题(C语言实现)(牛客网百度笔试真题)
迷宫问题(C语言实现)(牛客网百度笔试真题)
82 0
|
芯片
牛客网Verilog刷题(2)
牛客网Verilog刷题(2)
90 0
|
C语言
牛客网Verilog刷题(1)
牛客网Verilog刷题(1)
68 0
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
|
前端开发
牛客网DAY2(编程题)
牛客网DAY2(编程题)
53 0
|
算法 C语言
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
|
存储 算法 异构计算
牛客网verilog刷题知识点盘点(75道题的版本)
还有几个坑没填,知识点整理总结自互联网,本人csdn博客搬运
544 0