Verilog 入门

news2025/1/16 3:41:08

Verilog 入门

本内容来自 牛客网Verilog入门特别版

1、一个没有输入和一个输出常数1的输出的电路,输出信号为one

module top_module(one);
    output wire one;
    assign one = 1`b1;
endmodule

2、创建一个具有一个输入和一个输出的模块,其行为类似于电路上的连线。输入信号in0,输出信号out1

module wire0(in0,out1);
    input wire in0;
    output wire out1;
    assign out1 = in0;
endmodule

3、创建一个具有 2个输入和 3个输出的模块,使用线连接的方式:

a -> z
b -> x
b -> y
input wire a b ,output wire x y z

module top_module(a,b,x,y,z);
    input wire a,b;
    output wire x,y,z;
    assign a = z;
    assign b = x;
    assign c = y;
endmodule

4、输出输入信号的值的相反的值,输入in,输出out

module top_module(
   	input in,
	output out 
);
// assign out = !in;
assign out = ~in;
endmodule

5、创建实现 AND 门的模块,输入有三个wire,将三个信号(a b c)进行与操作,请思考在实际电路需要几个与门?请写出对应的RTL
输入:a、b、c
输出:d

module top_module( 
    input a, 
    input b, 
    input c,
    output d 
);
assign d = a & b & c;  
endmodule

6、创建实现 OR和NOR 的模块,NOR 门是输出反相的 OR 门。
c 是 nor输出,d是or输出
输入:a、b
输出:c、d

module top_module( 
    input a, 
    input b, 
    output c,
    output d
);
assign c = ~(a | b);
assign d = a | b; 
endmodule

7、创建一个实现 XOR 门的模块
输入:a、b
输出:c

module top_module( 
    input a, 
    input b, 
    output c
);
assign c = a ^ b;
endmodule

8、写出如图的rtl逻辑,限制使用最多四次assign
在这里插入图片描述
输入:a、b、c、d
输出:e、f

module top_module (
	input a,
	input b,
	input c,
	input d,
	output e,
	output f
);
// assign e = ~((a & b) ^ (c | d));
// assign f = (a & b) ^ (c | d);
xor(f,a&b,c|d);
assign e = ~f;
endmodule

9、下图为某芯片的逻辑,请通过RTL实现它的功能
在这里插入图片描述
输入:p1a,,p1b,p1c,p1d,p1e,p1f,p2a,p2b,p2c,p2d
输出:p1y,p2y

module top_module ( 
    input p1a, p1b, p1c, p1d, p1e, p1f,
    output p1y,
    input p2a, p2b, p2c, p2d,
    output p2y
);
// assign p1y = ((p1a & p1b & p1c) | (p1d & p1e & p1f));
// assign p2y = ((p2a & p2b) | (p2c & p2d));
or (p1y, p1c & p1b & p1a, p1f & p1e & p1d);
or (p2y, p2a & p2b, p2c & p2d);
endmodule

10、根据下述逻辑,给出对应的module设计
在这里插入图片描述
输入:a,b,c,d
输出:e,f

module top_module (
	input a,
	input b,
	input c,
	input d,
	output e,
	output f
);
assign e = ! ((a & b) ^ (c ^ d));
assign f = ((a & b) ^ (c ^ d) | d);
endmodule

11、构建一个具有一个3位输入in的信号[2:0],将其分成三个独立的输出a b c(从2到0)
输入:in
输出:a,b,c

module top_module(
    input [2:0] in,
    output a,b,c
);
assign a = in[2];
assign a = in[1];
assign a = in[0];
// 拼接字符
// assign {a,b,c} = in;
endmodule

12、一个16位信号in包含四个四位数[3:0]a [3:0]b [3:0]c [3:0]d,将它们顺序倒置为dcba输出
输入:in
输出:out

module top_module(
    input [15:0]in,
    output [15:0]out
);

wire [3:0] a,b,c,d;
assign {a,b,c,d} = in;
assign out = {d,c,b,a};

// genvar i;
// for (i=0; i<4; i=i+1) begin
//     assign out[15 - i*4 +: 4] = in[i*4 +: 4];
// end

endmodule

13、现有一个模块,输入信号为[2:0]a和[2:0]b,请输出信号的按位或[2:0]c和或信号d
输入:[2:0]a,[2:0]b
输出:[2:0]c,d

// 与:	& 按位与;	&& 逻辑与;
// 或:	| 按位或;	|| 逻辑或;
// 非:	~ 按位非;	! 逻辑非;
// 异或:^ 按位异或
module top_module(
	input [2:0] a, 
	input [2:0] b, 
	output [2:0] c,
	output d
);
	assign c = a | b;
	assign d = a || b;
endmodule

14、将一个五输入的信号分别进行的每一位进行: 全部按位与;全部按位或;全部按位异或
输入:[4:0]in
输出:out_and、out_or,、out_xor

module top_module( 
    input [4:0] in,
    output out_and,
    output out_or,
    output out_xor
);
    assign out_and = & in[4:0];
    assign out_or = | in[4:0];
    assign out_xor = ^ in[4:0];
    // &in[4:0] 等同于 
    // in[4]&in[3]&in[2]&in[1]&in[0]  |和^同理
endmodule

15、将6个输入信号串联转为四个信号输出,输入信号为[4:0]a [4:0]b [4:0]c [4:0]d [4:0]e [4:0]f,末尾增加一个宽度为两位的3,形成32位长度后,按照从前到后的顺序输出[7:0]w [7:0]x [7:0]y [7:0]z
输入:[4:0]a、[4:0]b、[4:0]c、[4:0]d、[4:0]e、[4:0]f
输出:[7:0]w、[7:0]x、[7:0]y、[7:0]z

module top_module(
    input [4:0] a, b, c, d, e, f,
    output [7:0] w, x, y, z );

    assign {w,x,y,z} = {a,b,c,d,e,f,2'd3};
endmodule

16、输入一个16位的信号in,将其从低位到高位输出(即反转顺序输出)为out
输入:[15:0] in
输出:[15:0] out

// 第一种reg + always语句
module top_module(
    input [15:0] in,
	output reg [15:0] out
);
    integer i;
    always @(*) begin
        for(i=0; i<16; i++) begin
            out[i] <= in[15-i];
        end
    end
endmodule

// 第二种generate for 内嵌的assign语句
// module top_module(
//     input [15:0] in,
// 	   output [15:0] out
// );
//     genvar i;
//     generate
//         for(i=0; i<16; i=i+1) begin
//             assign out[i] = in[15-i];
//         end
//     endgenerate
// endmodule

// 疑问:
// generate for 语句内嵌的assign语句是每次循环都赋值例化一次吗?
// 这样相当于把wire类型的assign语句变量值保存下来了,最后统一输出。
// 用reg + always语句,每次循环reg值是保存的,区别是在这里吗?

17、给定四个无符号数字,找到最大值。不使用if进行判断,尽量少使用语句的情况下完成。
输入:[7:0]a b c d
输出:[7:0] max

module top_module(
    input [7:0] a, b, c, d,
    output [7:0] max
);
    wire [7:0] max_ab;
    wire [7:0] max_ab_c;

    assign max_ab = a>b ? a : b;
    assign max_ab_c = max_ab>c ? max_ab : c;
    assign max = max_ab_c>d ? max_ab_c : d;
endmodule

18、给定五个1bit信号(a、b、c、d 和 e),生成两种25位的数据: 一种是将信号复制五次后连接起来aaaaabbbbb…,一种是将信号连接起来复制五次成为abcdeabcde… 。比较两个25位信号,如果两个信号的同样位置的位相等,则输出1。
输入:a、b、c、d、e
输出:[24:0] out

module top_module(
    input a, b, c, d, e,
	output [24:0] out
);
    wire  [24:0]  out1, out2;

    assign out1 = {{5{a}},{5{b}},{5{c}},{5{d}},{5{e}}};
    assign out2 = {5{a,b,c,d,e}};

    assign out = ~(out1 ^ out2);
endmodule

19、输入5个4bit信号,根据sel的值选出对应的信号,对应关系为:0~a 1~b 2~c 3~d 4~e 其他~置零
输入:
[3:0] a b c d e
[2:0]sel

输出:
[3:0] out

module top_module( 
    input [3:0] a, b, c, d, e, 
    input [2:0] sel,
    output reg [3:0] out
);
    always @(*) begin
        case (sel)
            0:  out = a;
            1:  out = b;
            2:  out = c;
            3:  out = d;
            4:  out = e;
            default:    out = 4'h0;
        endcase
    end
endmodule

20、输入一个256位信号,根据sel信号输出对应位数值,当 sel = 0 时选择 in[0],sel = 1 时选择 in[1],以此类推
输入:
[255:0] in
[7:0]sel

输出:
out

module top_module (
	input [255:0] in,
	input [7:0] sel,
	output reg out
);
	// 用此方法时,out的reg要去掉
	// assign out = in[sel];

	integer i;
    always @(*) begin
		for(i=0; i<256; i++) begin
			case(sel)
				i:	out = in[i];
			endcase
		end
    end
endmodule

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现FA-BP萤火虫算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…

CRYPTO 密码学-笔记

一、古典密码学 1.替换法&#xff1a;用固定的信息&#xff0c;将原文替换成密文 替换法的加密方式&#xff1a;一种是单表替换&#xff0c;另一种是多表替换 单表替换&#xff1a;原文和密文使用同一张表 abcde---》sfdgh 多表替换&#xff1a;有多涨表&#xff0c;原文和密文…

安装jenkins-cli

1、要在 Linux 操作系统上安装 jcli curl -L https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-linux-amd64.tar.gz|tar xzv sudo mv jcli /usr/local/bin/ 在用户根目录下&#xff0c;增加 jcli 的配置文件&#xff1a; jcli config gen -ifalse …

CPU 飙升问题排查

CPU 飙升问题排查 1.输入top查看各linux进程对系统资源的使用情况 2.输入top -H -p pid 通过此命令可以查看实际占用CPU最高的的线程的id&#xff0c;pid为刚才资源使用高的pid号 出现具体线程的资源使用情况&#xff0c;表格里的pid代表线程的id&#xff0c;我们称他为tid …

ubuntu 安装 postgresql以及 wal回滚

安装 sudo apt install postgresql postgresql-contrib设置远程连接 修改/etc/postgresql/12/main/postgresql.conf **将listen_addresses 改成 ***修改/etc/postgresql/12/main/pg_hba.conf 找到如下信息 #IPv4 local connections: 修改为 host all all 0.0.0.0/0 md5 重启…

生成式AI和大语言模型 Generative AI LLMs

在“使用大型语言模型(LLMs)的生成性AI”中&#xff0c;您将学习生成性AI的基本工作原理&#xff0c;以及如何在实际应用中部署它。 通过参加这门课程&#xff0c;您将学会&#xff1a; 深入了解生成性AI&#xff0c;描述基于LLM的典型生成性AI生命周期中的关键步骤&#xff…

opencv-yolov8-目标检测

import cv2 from ultralytics import YOLO# 模型加载权重model YOLO(yolov8n.pt)# 视频路径cap cv2.VideoCapture(0)# 对视频中检测到目标画框标出来 while cap.isOpened():# Read a frame from the videosuccess, frame cap.read()if success:# Run YOLOv8 inference on th…

opencv-疲劳检测-眨眼检测

#导入工具包 from scipy.spatial import distance as dist from collections import OrderedDict import numpy as np import argparse import time import dlib import cv2FACIAL_LANDMARKS_68_IDXS OrderedDict([("mouth", (48, 68)),("right_eyebrow",…

opencv-目标追踪

import argparse import time import cv2 import numpy as np# 配置参数 ap argparse.ArgumentParser() ap.add_argument("-v", "--video", typestr,help"path to input video file") ap.add_argument("-t", "--tracker", …

单发多框检测(SSD)【动手学深度学习】

单发多框检测模型主要由一个基础网络块和若干多尺度特征块串联而成。基本网络用于从输入图像中提取特征,可以使用深度卷积神经网络,原论文中选用了在分类层之前阶段的VGG,现在也常用ResNet替代。 我们可以设计基础网络,使它输出的高和宽较大,这样基于该特征图生成的锚框数…

亿赛通电子文档安全管理系统 RCE漏洞复现

0x01 产品简介 亿赛通电子文档安全管理系统&#xff08;简称&#xff1a;CDG&#xff09;是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

Lnton羚通关于【PyTorch】教程:torchvision 目标检测微调

torchvision 目标检测微调 本教程将使用Penn-Fudan Database for Pedestrian Detection and Segmentation 微调 预训练的Mask R-CNN 模型。 它包含 170 张图片&#xff0c;345 个行人实例。 定义数据集 用于训练目标检测、实例分割和人物关键点检测的参考脚本允许轻松支持添加…

3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately

在16世纪&#xff0c;西班牙探险家皮萨罗带领约200名西班牙士兵和37匹马进入了印加帝国。尽管印加帝国的军队数量达到了数万&#xff0c;其中包括5,000名精锐步兵和3,000名弓箭手&#xff0c;他们装备有大刀、长矛和弓箭等传统武器。但皮萨罗的军队中有100名火枪手&#xff0c;…

居然有这么好用的调试工具

居然有这么好用的调试工具 基本收发虚拟示波器GPIO操作PWM输出AD-DAIIC操作SPI操作GPS显示模块设置 基本收发 软件具备最常用的串口收发功能&#xff0c;可以在需要发送的数据最后选择添加一些常用的附加数据&#xff1a; 支持2通道COM口同时接收&#xff0c;目前自己最常用的…

ARM(实验二)

uart4.h #ifndef __H__ #define __H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化 void hal_uart4_init();//发送一个字符函数 void hal_put_char(const char str);//发…

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

目录 引出类什么时候被加载JVM中创建对象几种方式1.new 看到new : new Book()2.反射 Class.forName(“包名.类名”)如何获取Class对象【反射的基础】案例&#xff1a;连接数据库方法 3.克隆&#xff08;拷贝&#xff09;clone浅拷贝深拷贝案例 序列化和反序列化对象流-把对象存…

中大型无人机远程VHF语音电台系统方案

方案背景 中大型无人机在执行飞行任务时&#xff0c;特别是在管制空域飞行时地面航管人员需要通过语音与无人机通信。按《无人驾驶航空器飞行管理暂行条例》规定&#xff0c;中大型无人机应当进行适航管理。物流无人机和载人eVTOL都将进行适航管理&#xff0c;所以无人机也要有…

python ORM框架 sqlAlchemy

背景 最近在研究mysql的ORM框架&#xff0c;忽然看到了一个pip的包sqlalchemy&#xff0c;让我觉得很神奇&#xff0c;用下来的感觉和java的hibernate差不多&#xff0c;后边的链式查询又让我觉得和我很喜欢用的mybatis plus差不多&#xff0c;于是抱着好奇加上学习的态度&…

神经网络简单理解:机场登机

目录 神经网络简单理解&#xff1a;机场登机 ​编辑 激活函数&#xff1a;转为非线性问题 ​编辑 激活函数ReLU 通过神经元升维&#xff08;神经元数量&#xff09;&#xff1a;提升线性转化能力 通过增加隐藏层&#xff1a;增加非线性转化能力​编辑 模型越大&#xff0c;…

OpenCV 玩转图像和视频

为什么学OpenCV&#xff1f; • OpenCV ⽀持对图像缩放、旋转、绘制⽂字图形等基础操作 • OpenCV 库包含了很多计算机视觉领域常⻅算法&#xff1a;⽬标检测、⽬标跟踪等 OpenCV 简介 • OpenCV (Open Source Computer Vision) 是计算机视觉和机器学习软件库 • Intel 1999…