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
相关文章
|
11月前
|
算法 C语言
C语言 每日一题 牛客网习题 10.20 day2
C语言 每日一题 牛客网习题 10.20 day2
51 0
|
人工智能 算法 机器人
迷宫问题(C语言实现)(牛客网百度笔试真题)
迷宫问题(C语言实现)(牛客网百度笔试真题)
222 0
|
芯片
牛客网Verilog刷题(2)
牛客网Verilog刷题(2)
102 0
|
C语言
牛客网Verilog刷题(1)
牛客网Verilog刷题(1)
78 0
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
|
前端开发
牛客网DAY2(编程题)
牛客网DAY2(编程题)
63 0
|
算法 C语言
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
想说说关于在刷题网站(牛客 、C语言网、力扣)上测试样例过了但是OJ判错这档子事
蓝桥杯之单片机学习(二十七)——电子钟(附题目和完整代码)
蓝桥杯之单片机学习(二十七)——电子钟(附题目和完整代码)
141 0
蓝桥杯之单片机学习(二十七)——电子钟(附题目和完整代码)
|
存储 算法 异构计算
牛客网verilog刷题知识点盘点(75道题的版本)
还有几个坑没填,知识点整理总结自互联网,本人csdn博客搬运
584 0
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线优先编码器
132 0