【HDLBits刷题】Verilog Language——1.Basics

目录

一、题目与题解

1.Simple wire(简单导线)

2.Four wires(4线)

3.Inverter(逆变器(非门)) 

4.AND gate  (与门)

5. NOR gate  (或非门)

6. XNOR gate(异或非(同或)门)

7.Declaring wires(声明导线)

8.7458 chip( 7458芯片)

二、杂谈

1.新的数据类型:wire

2.串联运算符:{}

3.逻辑运算符

4.同或的表示方法


一、题目与题解

1.Simple wire(简单导线)

创建一个具有一个 input 和一个 output 的模块,其行为类似于一条线。

与物理电线不同,Verilog 中的电线(和其他信号)是定向的 。这意味着信息仅沿一个方向流动,从 (通常一个) 流向接收器 (源通常也称为驱动器 ,将值驱动到线路上) 。在 Verilog 的 “continuous assignment” ( assign left_side = right_side; ) 中,右侧的信号值被驱动到左侧的导线上。赋值是 “continuous” 的,因为即使右侧的值发生变化,赋值也会一直继续。连续分配不是一次性事件。

模块上的端口也有一个方向(通常是输入或输出)。输入端口由模块外部的东西驱动,而输出端口则驱动外部的东西。从模块内部查看时,输入端口是驱动器或源,而输出端口是接收器。

下图说明了电路的每个部分如何对应于Verilog代码的每个位。模块和端口声明创建电路的黑色部分。您的任务是通过添加要连接到 的语句来创建一条线路(绿色)。开箱即用的部件不是您关心的问题,但您应该知道,通过将测试线束的信号连接到顶部_模块的端口,可以测试您的电路。

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

2.Four wires(4线)

创建一个具有 3 个输入和 4 个输出的模块,其行为类似于进行以下连接的电线:

a -> w
b -> x
b -> y
c -> z

下图说明了 circuit 的每个部分如何对应于 Verilog 代码的每个位。从模块外部,有三个输入端口和四个输出端口。

当您有多个 assign 语句时,它们在代码中出现的顺序无关紧要。与编程语言不同, assign 语句(“连续赋值”)描述事物之间的连接 ,而不是将值从一个事物复制到另一个事物的操作 

现在也许应该澄清一个潜在的混淆来源:这里的绿色箭头代表电线之间的连接,但本身不是电线。该模块本身已经声明了 7 条电线(名为 a、b、c、w、x、y 和 z)。这是因为 input 和 output 声明实际上声明了一个连线,除非另有指定。写入输入线 a 与写入 a 相同。因此,assign 语句不是在创建电线,而是在已经存在的 7 条电线之间创建连接。 

module top_module( input a,b,c,output w,x,y,z );assign w = a;assign x = b,y = b;assign z = c;//如果我们确定每个信号的宽度,使用//串联运算符等效且更短://assign {w,x,y,z}={a,b,b,c};
endmodule

3.Inverter(逆变器(非门)) 

创建一个实现 NOT 门的模块。该电路类似于线,但略有不同。当从电线连接到电线时,我们将实现逆变器(或者"非门")而不是普通电线。使用assign语句。assign语句将持续将in的非转换为out。

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

4.AND gate  (与门)

创建实现 AND 门的模块。

该电路现在有三条导线(a、b和out)。导线a和b已经具有由输入端口驱动的值。但wire out目前并不是由任何因素驱动的。写一个assign语句,用a和b的AND信号输出。

请注意,该电路与NOT门非常相似,只是多了一个输入。如果听起来不一样,那是因为我已经开始描述信号是被驱动的(已知值由附加到它的某个东西决定)还是不是被某个东西驱动的。输入线由模块外部的东西驱动。assign语句将把一个逻辑电平驱动到一条线上。正如您所料,一条导线不能有多个驱动器(如果有,其逻辑级别是多少?),没有驱动程序的导线将有一个未定义的值(在合成硬件时通常被视为0)。

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

5. NOR gate  (或非门)

创建一个实现或非门的模块。或非门是输出反转的或门。在Verilog中编写NOR函数时需要两个运算符。

assign语句用一个值驱动一条线(或者更正式地称为“网”)。该值可以是任意复杂的函数,只要它是组合函数(即无内存、无隐藏状态)。assign语句是一种连续赋值,因为每当其任何输入发生变化时,都会“重新计算”输出,就像一个简单的逻辑门一样

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

6. XNOR gate(异或非(同或)门)

创建一个实现 XNOR 门的模块。

module top_module( input a, input b, output out );//assign out = a ~^ b;a和b相同输出0,不同输出1//assign out = a ^~ b;assign out = ~(a ^ b);
endmodule

7.Declaring wires(声明导线)

到目前为止,电路已经足够简单,以至于 output 是 inputs 的简单函数。随着电路变得越来越复杂,您将需要电线将内部组件连接在一起。当你需要使用 wire 时,你应该在 module 的主体中声明它,在它第一次使用之前的某个地方。(将来,您将遇到更多类型的信号和变量,它们也以相同的方式声明,但现在,我们将从 type 为 wire 的信号 ) 开始。

module top_module (input in,              // Declare an input wire named "in"output out             // Declare an output wire named "out"
);wire not_in;           // Declare a wire named "not_in"assign out = ~not_in;  // Assign a value to out (create a NOT gate).assign not_in = ~in;   // Assign a value to not_in (create another NOT gate).endmodule   // End of module "top_module"

在上面的模块中,有三根电线 ( in , out , 和 not_in ),其中两根已经声明为模块的输入和输出端口的一部分(这就是为什么你在前面的练习中不需要声明任何电线的原因)。需要在 module 内部声明 wire not_in 。从模块外部不可见。然后,使用两个 assign 语句创建两个 NOT 门。请注意,您首先创建哪个 NOT 门并不重要:您最终仍然会得到相同的电路。

实现以下电路。创建两条中间线(命名您想要的任何名称)以将 AND 和 OR 门连接在一起。请注意,馈送 NOT 门的 wire 实际上是 wire out ,因此您不一定需要在此处声明第三根 wire 。请注意 wires 是如何由一个 source (gate 的 output) 驱动的,但可以馈送多个 inputs。

如果您遵循图中的电路结构,则最终应该有四个 assign 语句,因为有四个信号需要赋值。

module top_module (input a,input b,input c,input d,output out,output out_n );wire w1, w2;		// Declare two wires (named w1 and w2)assign w1 = a&b;	// First AND gateassign w2 = c&d;	// Second AND gateassign out = w1|w2;	// OR gate: Feeds both 'out' and the NOT gateassign out_n = ~out;	// NOT gateendmodule

8.7458 chip( 7458芯片)

7458 是一款具有 4 个 AND 门和 2 个 OR 门的芯片。此问题比 7420 稍微复杂一些。

创建与 7458 芯片具有相同功能的模块。它有 10 个输入和 2 个输出。您可以选择使用 assign 语句来驱动每根输出线,也可以选择声明 (four) 线用作中间信号,其中每根内部线都由其中一个 AND 门的输出驱动。如需额外练习,请尝试两种方式。

module top_module ( input p1a, p1b, p1c, p1d, p1e, p1f,output p1y,input p2a, p2b, p2c, p2d,output p2y );//第一种方法assign p2y = (p2a & p2b) | (p2c & p2d);assign p1y = (p1a & p1c & p1b) | (p1f & p1e & p1d);//第二种方法wire a,b,c,d;assign a = p2a & p2b;assign b = p2c & p2d;assign p2y = a | b;assign c = p1a & p1c & p1b;assign d = p1f & p1e & p1d;assign p1y = c | d;
endmodule

二、杂谈

1.新的数据类型:wire

2.串联运算符:{}

        assign {w, x, y, z} = {a, b, b, c};

        可实现一对一的赋值

3.逻辑运算符

        &与

        |或

        ~非

         ^异或

4.同或的表示方法

       ~ (a ^ b) == (a ^~ b) == (a ~^ b)

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

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

相关文章

C语言|递归求n!

C语言| 函数的递归调用 【递归求n!】 0!1; 1!1 n! n*(n-1)*(n-2)*(n-3)*...*3*2*1; 【分析过程】 定义一个求n&#xff01;的函数&#xff0c;主函数直接调用 [ Factorial()函数 ] 1 用if语句去实现&#xff0c;把求n!的情况列举出来 2 if条件有3个&#xff0c;n<0; n0||n…

Android第四次面试总结之Java基础篇(补充)

一、设计原则高频面试题&#xff08;附大厂真题解析&#xff09; 1. 单一职责原则&#xff08;SRP&#xff09;在 Android 开发中的应用&#xff08;字节跳动真题&#xff09; 真题&#xff1a;“你在项目中如何体现单一职责原则&#xff1f;举例说明。”考点&#xff1a;结合…

OpenHarmony GPIO应用开发-LED

学习于&#xff1a; https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-platform-gpio-develop.md https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-platform-gpio-des.md 通过OpenHarmony官方文档指导可获知&#xff1a;芯片厂…

XILINX原语之——xpm_fifo_async(异步FIFO灵活设置位宽、深度)

目录 一、"fwft"模式&#xff08;First-Word-Fall-Through read mode&#xff09; 1、写FIFO 2、读FIFO 二、"std"模式&#xff08;standard read mode&#xff09; 1、写FIFO 2、读FIFO 调用方式和xpm_fifo_sync基本一致&#xff1a; XILINX原语之…

系统学习算法:动态规划(斐波那契+路径问题)

题目一&#xff1a; 思路&#xff1a; 作为动态规划的第一道题&#xff0c;这个题很有代表性且很简单&#xff0c;适合入门 先理解题意&#xff0c;很简单&#xff0c;就是斐波那契数列的加强版&#xff0c;从前两个数变为前三个数 算法原理&#xff1a; 这五步可以说是所有…

《让内容“活”起来:Flutter社交应用瀑布流布局的破界实践》

用户动态的展示方式如同舞台的布景&#xff0c;直接影响着观众——用户的体验。而瀑布流布局&#xff0c;以其独特的美感和高效的信息展示能力&#xff0c;成为众多社交应用的心头好。当我们滑动着Instagram、Pinterest&#xff0c;或是国内热门的小红书&#xff0c;那种内容如…

微机控制技术复习【一】

填空题&#xff1a; 简答题&#xff1a; 1、什么是计算机控制系统?其典型形式有哪些? 2、给出 DDC &#xff08;直接数字控制&#xff09;控制系统结构框图&#xff0c;并说明各组成部分的作用&#xff1f; 3、采样周期选择的理论依据是什么?工程应用中应如何选择?选择采样…

前端学习基础—VScode环境配置及html基础知识

作为初学者&#xff0c;一个好的开发环境能极大地提高理解与学习的效率&#xff0c;本文分享我的VScode环境配置方法&#xff0c;涵盖插件、主题、快捷键等&#xff0c;希望能助你快速搭建舒适边界的前端学习环境。 一、VSCode环境配置 首先找到vscode插件商店&#xff0c;在这…

【一】 基本概念与应用领域【830数字图像处理】

考纲 文章目录 1 概念2005甄题【名词解释】2008、2012甄题【名词解释】可考题【简答题】可考题【简答题】 2 应用领域【了解】2.1 伽马射线成像【核医学影像】☆2.2 X射线成像2.3 紫外波段成像2.4 可见光和红外波段成像2.5 微波波段成像2.6 无线电波段成像2.7 电子显微镜成像2…

QuecPython错误码汇总

QuecPython中定义的各种错误代码常量 错误码常量错误码释义QUEC_PY_FAIL-1Generic failure codesQUEC_PY_OK0Quec_py value indicating success (no error)QUEC_PY_EPERM1Operation not permittedQUEC_PY_ENOENT2No such file or directoryQUEC_PY_ESRCH3No such processQUEC_…

C++学习-入门到精通-【4】函数与递归入门

C学习-入门到精通-【4】函数与递归入门 函数与递归入门 C学习-入门到精通-【4】函数与递归入门一、 数学库函数sqrt()ceil()cos()exp()fabs()floor()fmod()log()log10()pow()sin()tan()总结 二、具有多个形参的函数定义三、函数原型、函数签名和实参的强制类型转换函数原型函数…

天线测试报告解读学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、无源测试和有源测试二、无源测试报告1.驻波2.回损3.史密斯圆图4.效率5.增益6.天线方向图7.天线隔离度8.无源测试总结 三、有源测试报告1.TRP与TIS2.测试指标…

GEC6818蜂鸣器驱动开发

相关知识&#xff1a;Linux设备驱动开发 insmod 编译好的.ko文件后再运行beep_app.c编译完成的可执行文件即可使板子蜂鸣。 beep_drv.c: #include <linux/module.h> //包含了加载模块时需要使用的大量符号和函数声明 #include <linux/kernel.h> //包含了printk内…

电脑定时管家!Wise Auto Shutdown 深度测评:多任务执行 + 灵活定时

各位电脑小达人&#xff0c;今天给大家介绍一款超厉害的Windows系统定时任务管理工具——Wise Auto Shutdown&#xff01;这玩意儿就像电脑的贴心小管家&#xff0c;能自动执行关机、重启这些操作&#xff0c;时间设定灵活得很&#xff0c;还有提醒机制呢。下面我给大家好好唠唠…

vscode 配置qt

工具&#xff1a;vscode、qttools、qtconfigure Search Mode改成基于cmake的。 # 在项目中指定Qt的路径 set(Qt5_DIR "/home/jp/qt-everywhere-src-5.12.9/arm-qt/lib/cmake/Qt5") # 用于指定 Qt5 的安装路径 find_package(Qt5 REQUIRED COMPONENTS Widgets)这样就…

基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;项目 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 项目背景技术栈和项目环境正排索引和倒排索引数据去标签与清洗下载数据源去标签 建立索引构建正排索引构建倒排索引 建立搜索引擎h…

QMK机械键盘固件开发指南:从源码到实践

QMK机械键盘固件开发指南&#xff1a;从源码到实践 前言 QMK&#xff08;Quantum Mechanical Keyboard&#xff09;是一款开源的键盘固件&#xff0c;支持众多自定义键盘的功能配置。通过QMK&#xff0c;您可以完全掌控键盘的每一个按键&#xff0c;实现复杂的宏指令、多层按…

WPF 导航

WPF 导航相关控件/机制 控件 / 类说明常用属性/方法Frame用来承载不同的页面 (Page) 并在它们之间切换的容器。Source&#xff08;导航到的 URI&#xff09; Navigate()&#xff08;导航方法&#xff09; CanGoBack / GoBack() CanGoForward / GoForward()Page表示一个单独的可…

时序建模演进之路:从 MLP、RNN 到 LSTM 与 GRU

时序建模演进之路&#xff1a;从 MLP、RNN 到 LSTM 与 GRU 您是否好奇机器如何能像人类一样理解、生成流畅的文本&#xff0c;甚至是从海量代码中自动生成文档&#xff1f;这些自然语言处理 (NLP) 领域的迷人挑战&#xff0c;其核心在于模型处理和记忆 序列数据 的能力。 然而…

【Redis——数据类型和内部编码和Redis使用单线程模型的分析】

文章目录 Redis的数据类型和内部编码单线程模型的工作过程Redis在处理命令时虽然是一个单线程模型&#xff0c;为啥效率那么高&#xff0c;速度快呢&#xff1f; 总而言之&#xff0c;Redis提供的哈希表容器并不一定真的是真的哈希表&#xff0c;而是在特点的场景下&#xff0c…