牛客网Verilog刷题——VL51

牛客网Verilog刷题------VL51

题目

  请编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号zero,当置位信号set 有效时,将当前输出置为输入的数值set_num。模块的接口信号图如下:

  模块的时序图如下:

  输入输出描述:

信号 类型 输入/输出 位宽 描述
clk wire Input 1 系统时钟信号
rst_n wire Input 1 异步复位信号,低电平有效
set wire Input 1 置位指示信号,当该信号有效时,表示将输出信号强制置为set_num
set_num wire Input 4 4比特信号,当set信号有效时,将该信号的数字赋予输出信号number
zero reg Output 1 过零指示信号,当number计数到0时,该信号为1,其余时刻为0
number reg Output 4 4比特位宽,表示计数器的当前读数

答案

c 复制代码
`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] r_number;

always @(posedge clk or negedge rst_n)
  if(!rst_n)
    r_number <= 4'd0;
  else if(set)
    r_number <= set_num;
  else if(r_number == 4'd15)
    r_number <= 4'd0;
  else
    r_number <= r_number + 1'b1;

always @(posedge clk or negedge rst_n) 
  if(!rst_n)
    zero <= 1'b0;
  else if(r_number=='d0)
    zero <= 1'b1;
  else
    zero <= 1'b0;

always @(posedge clk or negedge rst_n) 
  if(!rst_n)
    number <= 'd0;
  else
    number <= r_number;

endmodule
相关推荐
I'm a winner10 小时前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper202012 小时前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy19 小时前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia20 小时前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper202020 小时前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子1 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安2 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun2 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun2 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议
忆锦紫3 天前
vivado报错及解决【十】
fpga开发·fpga·vivado