verilog编程题

verilog编程题

文章目录

  • verilog编程题
    • 序列检测电路(状态机实现)
    • 分频电路
    • 计数器
    • 译码器
    • 选择器
    • 加减器
    • 触发器
    • 寄存器

序列检测电路(状态机实现)

在这里插入图片描述


module Detect_101(
    input           clk,
    input           rst_n,
    input           data,
    output          flag_101
    );

parameter   S0 = 0,
            S1 = 1,
            S2 = 2,
            S3 = 3;

reg     [1:0]   state;

always @(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)begin
        state <= S0;
    end
    else begin
        case(state)
        S0: 
            if(data == 1)
                state <= S1;
            else 
                state <= S0;
        S1: 
            if(data == 0)
                state <= S2;
            else 
                state <= S1;
        S2:
            if(data == 1)
                state <= S3;
            else 
                state <= S0;
        S3:
            if(data == 1)
                state <= S1;
            else 
                state <= S2;
        default:
                state <=S0;       
        endcase
    end
end

assign  flag_101 = (state == S3)? 1'b1: 1'b0;

endmodule

分频电路

采用触发器反向输出端连接到输入端的方式,可构成简单的 2 分频电路。

以此为基础进行级联,可构成 4 分频,8 分频电路。

按题目要求,几分频就留哪个。

module even_divisor
  # (parameter DIV_CLK = 10 )
    (
    input               rstn ,
    input               clk,
    output              clk_div2,
    output              clk_div4,
    output              clk_div10
    );

   //2 分频
   reg                  clk_div2_r ;
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         clk_div2_r     <= 'b0 ;
      end
      else begin
         clk_div2_r     <= ~clk_div2_r ;
      end
   end
   assign       clk_div2 = clk_div2_r ;

   //4 分频
   reg                  clk_div4_r ;
   always @(posedge clk_div2 or negedge rstn) begin
      if (!rstn) begin
         clk_div4_r     <= 'b0 ;
      end
      else begin
         clk_div4_r     <= ~clk_div4_r ;
      end
   end
   assign clk_div4      = clk_div4_r ;

   //N/2 计数
   reg [3:0]            cnt ;
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         cnt    <= 'b0 ;
      end
      else if (cnt == (DIV_CLK/2)-1) begin
         cnt    <= 'b0 ;
      end
      else begin
         cnt    <= cnt + 1'b1 ;
      end
   end

   //输出时钟
   reg                  clk_div10_r ;
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         clk_div10_r <= 1'b0 ;
      end
      else if (cnt == (DIV_CLK/2)-1 ) begin
         clk_div10_r <= ~clk_div10_r ;
      end
   end
   assign clk_div10 = clk_div10_r ;
endmodule

计数器

module Count
(
    input               clk                 ,
    input               rst_n               ,
    output reg [ 3:0]   cnt
);

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        cnt <= 4'd0;
    else if(cnt==4'd9)
        cnt <= 4'd0;
    else
        cnt <= cnt + 1'b1;
end



endmodule

译码器

`timescale 10ns/1ns
module decode3_8 (data_out,data_in,enable) ;
input [2:0] data_in;
input enable;
output [7:0] data_out;
reg [7:0] data_out;
 
always @(data_in or enable)
begin
       if (enable==1)
              case (data_in )
              3'b000: data_out=8'b11111110;
              3'b001: data_out=8'b11111101;
              3'b010: data_out=8'b11111011;
              3'b011: data_out=8'b11110111;
              3'b100: data_out=8'b11101111;
              3'b101: data_out=8'b11011111;
              3'b110: data_out=8'b10111111;
              3'b111: data_out=8'b01111111;
              default: data_out=8'bxxxxxxxx;
              endcase
       else
              data_out=8'b11111111;
end
 
endmodule

选择器

代码为4选1,如果题目是2选1或者更多选1就case后进行更改

module mux_4_1 (
	input 			C, D, E, F,
	input 	[1:0]	S,
	output	reg		Mux_out
);

always @ (C or D or E or F or S) begin
	case(S)
		2'b00	: Mux_out = C;
		2'b01	: Mux_out = D;
		2'b10	: Mux_out = E;
		default	: Mux_out = F;
	endcase
end

endmodule

加减器

16位加减法器。当sub为1时,是减法;当sub为0时是加法。

看题目要求,有几位写几位

module top_module(
	input [31:0] a,
	input [31:0] b,
	input sub,
	output [31:0]sum
	);
wire [31:0]xor_1;
wire [15:0]sum_1;
wire [15:0]sum_2;
wire cout_1,cout_2;
//xor xor_gate(xor_1,b,sub);//逻辑或,我们这里的设计不应该是逻辑或,应该是下边的按位取或
assign xor_1 = b^{32{sub}} ;//按位异或
assign sum = {sum_2,sum_1};
add16 u1_add16(
	.a(a[15:0]),
	.b(xor_1[15:0]),
	.cin(sub),
	.sum(sum_1),
	.cout(cout_1)
	);
add16 u2_add16(
	.a(a[31:16]),
	.b(xor_1[31:16]),
	.cin(cout_1),
	.sum(sum_2),
	.cout(cout_2)
	);

endmodule

触发器

带同步清0、同步置1的D触发器

module D_EF(q,qn,d,clk,set,reset)

input d,clk,set,reset;

output q,qn;

reg q,qn;

always @ (posedge clk)

       begin

              if(reset) begin q<=0;qn<=1;end//同步清0,高有效

              else if(set) begin q<=1;qn<=1;end //同步置1,高有效

              else begin q<=~d;qn<=~d;end

       end  

endmodule

寄存器

有异步清零端的n位寄存器,看题目要求,有几位n就写几

module regn(D,clk,reset,Q);

  parameter n=16;
  input  [n-1] D;
  input  clk,reset;
  output [n-1] reg Q;

  always @(negedge reset,posedge clk)

      if(!reset)  //复位端reset低电平有效
         Q<=0;
       else
         Q<=D;

endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高防云主机安全解决方案

全球防护 高防云服务器支持区域覆盖中国大陆和海外地区&#xff0c;包括北京、上海、广州和中国香港等地。通过组合DDoS高防包和对应地区的CVM资源&#xff0c;可提供T级的单地区防护能力。 稳定可靠 兼顾防护和性能&#xff0c;DDoS提供实时防护&#xff0c;清洗成功率达99…

vulnhub靶场之DC-8

一.环境搭建 1.靶场描述 DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept&quo…

【含完整代码】Java定时任务之xxl-job[超详细]

前言 个人博客&#xff1a;www.wdcdbd.com 在Java中使用定时任务是一件很常见的事情&#xff0c;比如使用定时任务在什么时间&#xff0c;什么时候&#xff0c;去发布一些信息&#xff0c;或者去查询一些日志等相关的代码。这时&#xff0c;我们就要开发定时任务这中功能来实现…

UNRAID 优盘制作

使用方法和开心方法&#xff1a; 如果重启之后显示器有信号但是黑屏无法正常引导系统&#xff0c;此为九代以后主板快速开机&#xff08;快速引导&#xff09;UNRAID并不支持快速引导所以会直接卡黑屏。所以发现这种情况的时候请进BIOS关闭和开机快速引导或和快有关系的任何开…

LeetCode 589. N 叉树的前序遍历

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,nul…

扩散模型(二)——DDIM学习笔记-大白话推导

扩散模型系列&#xff1a; &#xff08;1&#xff09;扩散模型(一)——DDPM推导笔记-大白话推导 &#xff08;2&#xff09;扩散模型(二)——DDIM学习笔记-大白话推导 请提前关注&#xff0c;后续待更新&#xff0c;谢谢… 写在前面&#xff1a; &#xff08;1&#xff09;建议…

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法&#xff08;违背题意&#xff09;2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题&#xff0c;一开始并没有想到好的解题思路&#xff0c;写篇博客再来梳理一下吧。 题目要求&#xff1a; 不使用除法在O(n)时间复杂度内 1.使用除法&am…

vue3 模版语法

模板语法 Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。 文本插值 最基本的数据绑定形式是文本插值&#xff0c;它使用的是“Mustache”语法 (即双大括号)&#xff1a; <span>Message: {{ msg }}</span&…

Netty-Netty实现自己的通信框架

通信框架功能设计 功能描述 通信框架承载了业务内部各模块之间的消息交互和服务调用&#xff0c;它的主要功能如下&#xff1a; 基于 Netty 的 NIO 通信框架&#xff0c;提供高性能的异步通信能力&#xff1b; 提供消息的编解码框架&#xff0c;可以实现 POJO 的序列化和反…

Qt编译OpenCV

1.CMake下载安装 官网地址&#xff1a;CMake - Upgrade Your Software Build System &#xff08;1&#xff09;下载后双击安装 &#xff08;2&#xff09;进入安装界面&#xff0c;点击【Next】 &#xff08;3&#xff09;同意协议&#xff0c;点击【Next】 &#xff08;4&a…

鸿蒙Harmony-线性布局(Row/Column)详解

人生的下半场&#xff0c;做个简单的人&#xff0c;少与人纠缠&#xff0c;多看大自然&#xff0c;在路上见世界&#xff0c;在途中寻自己。往后余生唯愿开心健康&#xff0c;至于其他&#xff0c;随缘就好&#xff01; 目录 一&#xff0c;定义 二&#xff0c;基本概念 三&am…

c++多久会被Python或者新语言取代?

c多久会被Python或者新语言取代&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

使用android studio编译app到自己的手机上运行,却读取不了手机里面的图片

问题描述&#xff1a; 使用android studio编译app到自己的手机上运行&#xff0c;却读取不了手机里面的图片 问题分析&#xff1a; 这个是由于这个app没有申请手机端的 媒体文件访问权限&#xff0c;所以读取不了 解决&#xff1a;&#xff08;我的是Android 10&#xff0c;新版…

深度解析Pytest插件pytest-html

在软件开发中&#xff0c;测试报告是开发者获取测试结果和问题定位的关键工具之一。然而&#xff0c;标准的控制台输出有时难以满足我们对测试报告的需求。幸运的是&#xff0c;Pytest插件 pytest-html 提供了一种简单而强大的方式&#xff0c;可以生成漂亮、可视化的HTML格式测…

Arm LDM和STM的寻址方式

A32指令集中包含多数据传输指令LDM和STM&#xff0c;也就是单条指令可以传输多个寄存器的值与内存交互&#xff0c;这对于数据块传输以及寄存器的压入栈很有帮助。LDM和STM指令可分别用于实现堆栈的pop和push操作。对于堆栈操作&#xff0c;基寄存器通常是堆栈指针(SP)。 LDM和…

录第第五十八天——每日温度,下一个更大元素|

单调栈 栈里的元素保持单调递增或者递减&#xff0c;栈内元素是元素下标。单调栈的本质是空间换时间&#xff0c;因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素&#xff0c;优点是整个数组只需要遍历一次求一个元素右边第一个更大元素&#xff0c;单调栈…

Unity游戏图形学 Shader结构

shader结构 shader语言 openGL&#xff1a;SLG跨平台 >GLSL&#xff1a;openGL shaderlauguge DX&#xff1a;微软开发&#xff0c;性能很好&#xff0c;但是不能跨平台 >HLSL&#xff1a;high level shader language CG&#xff1a;微软和Nvidia公司联合开发&#xff…

【c++】利用嵌套map创建多层树结构

通常树的深度都大于1&#xff0c;即树有多层&#xff0c;而树结构又可以用c的map容器来实现&#xff0c;所以&#xff0c;本文给出了一种多层树结构的实现思路&#xff0c;同时也给出了相应的c代码。 整体思路概述 首先定义一个节点类Node类&#xff0c;要包括children&#x…

WIndows系统重装、备份与恢复实操问题笔记

一 windows重装 1.1 基本步骤 下载大白菜根据官网使用教程制作启动u盘从MSDN或者微软官网下载Windows镜像根据查询的快捷键进入BIOS系统&#xff0c;设置U盘为第一启动 重装 1.2 Windows 11 激活 微软其实在2023年9月20日的公告中宣布停掉免费升级&#xff0c;数字激活工具…

C++中使用vector保存新建对象中自指指针的问题

问题 在某些场景中&#xff08;例如并查集&#xff09;&#xff0c;我们需要将新建对象中的指针指向对象自己。例如&#xff0c; struct factor {int data;factor* next;factor(int i) : data(i), next(this){} }; 这样的结构体当然没有问题&#xff0c;如果我们想以类似链表…