Verilog
文章平均质量分 74
葡萄乳奶
这个作者很懒,什么都没留下…
展开
-
HDLBits——More Circuits
HDLBits——More CircuitsProblem 115 Rule90Requirement:Rule90 是一道根据一些有趣的规则来生成一维序列的题目。规则很简单:一维序列中元素有 1、0 两种状态,分别对应开、关状态。在每个时钟边沿到来时刻,元素的下一个状态为元素相邻两个元素的异或。下表更详细地给出了跳变的规则(可以视为状态转移表),元素下一个状态可以视作输出,输入为元素本身的状态与相应两个相邻元素的当前状态。(“Rule90” 这个名字来自表中 “next state 下一状态”原创 2021-12-26 10:31:11 · 2183 阅读 · 0 评论 -
HDLBits——Shift Registers
HDLBits——Shift RegistersProblem 106 4-bit shift registerRequirement:设计一个 4bit 异步复位,拥有同步置位(load)和使能的右移移位寄存器。areset : 寄存器复位为 0。load : 将 data[3:0] 输入至移位寄存器中而不是移位。ena : 使能信号,控制向右移动(q[0] 移出消失,q[3] 变为0)。q : 移位寄存器中的数据。如果 load 和 ena 输入同时为高原创 2021-12-20 22:42:54 · 637 阅读 · 0 评论 -
HDLBits——Counters
HDLBits——CountersProblem 98 Four-bit binary counterRequirement:设计一个 4bit 的计数器,从 0~15,共 16 个周期,reset 是同步复位且复位为 0。Solution:module top_module ( input clk, input reset, // Synchronous active-high reset output reg [3:0] q); always @原创 2021-12-19 21:54:37 · 447 阅读 · 0 评论 -
HDLBits——Latches and Flip-Flops
HDLBits——Latches(锁存器) and Flip-Flops(触发器)Problem 80 : D flip-flop (Dff)Requirement:实现一个 D 触发器。D 触发器是一个最简单的触发器,存储 1bit 数据,并定期地根据触发器的输入(d)更新这 1 bit 数据,更新通常发生在时钟上升沿(clk),存储的数据会通过输出管脚(q)输出。在时钟敏感的 always 块中的语句一般都会被综合工具转换为相应的触发器。Solution:module top_module原创 2021-12-08 16:18:54 · 854 阅读 · 1 评论 -
HDLBits——Karnaugh Map to Circuit
HDLBits——Karnaugh Map to CircuitProblem 72 3-variableRequirement:根据卡诺图来实现电路,用最大项之积和最小项之和的形式来完成电路设计。在编写 verilog 之前,可先化简卡诺图。Solution:module top_module( input a, input b, input c, output out ); assign out = a | b | c;endmodule原创 2021-12-06 19:52:47 · 316 阅读 · 0 评论 -
HDLBits——Arithmetic Circuits
HDLBits——Arithmetic CircuitsProblem 65 : Half adder (Hadd)Requirement:本题中需要实现一个 2 进制 1bit 加法器,加法器将输入的两个 1bit 数相加,产生两数相加之和以及进位。Solution:module top_module( input a, b, output cout, sum ); assign {cout,sum} = a + b; endmoduleProbl原创 2021-12-02 16:20:01 · 248 阅读 · 0 评论 -
HDLBits——Multiplexers
HDLBits——MultiplexersProblem 60 : 2-to-1 multiplexer (Mux2to1)Requirement:multiplexer:多路选择器。本题中需要实现一个 2 选 1 选择器,sel 信号作为选择信号,当 sel = 1 时选择 b,反之选择 a。Solution:module top_module( input a, b, sel, output out ); assign out = sel ? b : a;原创 2021-12-01 21:22:48 · 424 阅读 · 0 评论 -
HDLBits——Basic Gates
HDLBits——Basic Gates原创 2021-11-30 19:58:31 · 284 阅读 · 0 评论 -
HDLBits——More Verilog Features
HDLBits——More Verilog FeaturesProblem 36: Conditional ternary operator(Conditional)Requirement:给出四个无符号数,请找到其中的最小值。提示:使用条件运算符描述一个两路的最小值电路,然后组合它来创建一个4路最小电路,可能需要一些wire变量用于表述中间结果。无符号数可以使用比较运算符进行比较Solution:module top_module ( input [7:0] a, b, c,原创 2021-11-29 21:46:10 · 379 阅读 · 0 评论 -
HDLBits——Procedures
HDLBits——ProceduresProblem 28: Always blocks(combinational) (Alwaysblock1)Requirement:过程块(比如 always 块)提供了一种用于替代 assign 语句描述电路的方法。分别使用 assign 语句和组合 always 块来构建与门。Solution:// synthesis verilog_input_version verilog_2001module top_module( input a,原创 2021-11-28 16:48:28 · 585 阅读 · 0 评论 -
HDLBits——Modules:Hierarchy
HDLBits——Modules:HierarchyProblem 19 : ModulesRequirement:创建一个下级模块 mod_a,将其的三个端口 in1 ,in2 ,out 按照图中的连接方式,分别连接到顶层模块的 a ,b,out 端口上。Solution:module top_module ( input a, input b, output out ); mod_a mod_a ( .in1(a), .in2(b),原创 2021-11-27 21:07:08 · 714 阅读 · 0 评论 -
HDLBits——Vectors
HDLBits —— VectorsVectors(向量;总线)要求:构造一个电路,拥有 1 个 3 bit 位宽的输入端口,4 个输出端口。其中一个输出端口直接输出输入的向量,剩下 3 个输出端口分别各自输出 3 bit 中的 1 bit。上图中,箭头上的小斜杠旁边的数字代表该向量(总线)的位宽,用于将向量同 wire 信号区别开来。Solution:module top_module ( input wire [2:0] vec, output wire [2:0] out原创 2021-11-25 15:30:11 · 469 阅读 · 2 评论 -
HDLBits——Basics
HDLBits——BasicsSimple wire要求:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xVLSIS1l-1637764502113)(https://hdlbits.01xz.net/mw/thumb.php?f=Wire.png&width=800)]Solution:module top_module( input in, output out ); assign out = in;endmoduleTiming di原创 2021-11-24 22:36:14 · 211 阅读 · 0 评论 -
10 - 状态机代码设计与仿真
10 - 状态机代码设计与仿真串口指令处理器代码:cmd_pro.v//2021.11.24 lyw//Instruction processormodule cmd_pro ( clk, res, din_pro, en_din_pro, dout_pro, en_dout_pro,原创 2021-11-24 15:55:10 · 296 阅读 · 0 评论 -
9 - 状态机代码设计与仿真
9 - 状态机代码设计与仿真串口数据发送状态规划:代码://2021.11.23 lyw//Serial port data sending`timescale 1ns/10psmodule UART_TXer ( clk, res, data_in, en_data_in, TX, rdy);原创 2021-11-24 13:53:17 · 222 阅读 · 0 评论 -
8 - 状态机代码设计与仿真
8 - 状态机代码设计与仿真串口数据接收波特率 VS 比特率:在信息传输通道中,携带数据信息的信号单元叫码元。每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是传输通道频宽的指标。每秒钟通过信道传输的信息量称为位传输速率,简称比特率。比特率表示有效数据的传输速率。比特率 = 波特率 * 单个调制状态对应的二进制位数。UART:串行接口是指数据在有限的几个 IO 上按照顺序,一位一位的进行传输。这类有很多:UART、IIC、SPI、CAN、USB 等等,只要是串行传输的接口,都原创 2021-11-23 16:50:47 · 3649 阅读 · 1 评论 -
7 - 简单状态机代码设计
7 - 简单状态机代码设计三角波发生器代码://2021.11.21 lyw//The simplest state machine——triangle wave generator`timescale 1ns/10psmodule tri_gen ( clk, res, d_out);input clk;input res;output[8:0]原创 2021-11-22 14:30:19 · 746 阅读 · 0 评论 -
6 - 时序逻辑代码设计与仿真
6 - 时序逻辑代码设计与仿真相邻 16 点相加输出采样脉冲尖 = 采样时钟和采样时钟反向延时的与,全称:采样时钟上升沿识别脉冲。con_syn 也叫采样时钟循环计数器,对采样脉冲尖进行 0-15 的循环计数,用于控制累加的节奏,每当计数器结果为 15 时,把累加结果送到 data_out,并产生一个累加和同步脉冲。代码://2021.11.20 lyw//Add adjacent 16 points`timescale 1ns/10psmodule sigma_16p (原创 2021-11-21 16:50:52 · 520 阅读 · 0 评论 -
5 - 时序逻辑代码设计与仿真
5 - 时序逻辑代码设计与仿真秒计数器(0-9 循环计数)把系统时钟进行分频,得到秒脉冲,对秒脉冲进行计数。con_t 是秒脉冲分频计数器,需要对 24M 来计数,至少需要 25 位。s_pulse 是秒脉冲尖,con_t 为 0 时为1,1 秒有 24M 个脉冲,但只有 1 个脉冲时 s_pulse=1。s_num 是秒计数器,看到 s_pulse 为 1 时计数。//2021.11.19 lyw//Second counter 0-9 cycles`timescale 1ns/10原创 2021-11-19 22:26:05 · 593 阅读 · 2 评论 -
4 - 时序逻辑代码设计和仿真
4 - 时序逻辑代码设计和仿真计数器always 块理解:触发器的敏感变量是时钟信号的上升沿和复位信号的下降沿【这是时序逻辑电路的特点】。敏感信号的意思是:只有到达时钟信号的上升沿和复位信号的下降沿时,always 才会动,即去判断引起 always 变化的是不是复位信号。if() 里面是触发器复位时的动作【res 为0】,else 是触发器正常工作时的动作。触发器复位就是清零,正常工作就是把 sum 送给 y。之前的组合逻辑中也用到过 always 和 reg 型变量,但它们都不原创 2021-11-18 22:45:02 · 550 阅读 · 0 评论 -
3 - 组合逻辑代码设计和仿真
3 - 组合逻辑代码设计和仿真补码转换代码://2021.11.18 lyw//Complement conversion`timescale 1ns/10psmodule comp_conv ( a, a_comp);input[7:0] a;output[7:0] a_comp;assign a_comp=a[7]?{a[7],~a[6:0]+1}:a;endmodule/原创 2021-11-18 15:27:23 · 351 阅读 · 0 评论 -
2 - 组合逻辑代码设计和仿真
2 - 组合逻辑代码设计和仿真用问号冒号语句实现二选一:用 always 语句块实现组合逻辑:用 if-else 实现二选一://2021.11.17 lyw//2 choose 1 logic design`timescale 1ns/10psmodule fn_sw ( a, b, sel, y);input a;input b;input se原创 2021-11-17 19:18:22 · 372 阅读 · 0 评论 -
1 - 基本逻辑门代码设计和仿真
1 - 基本逻辑门代码设计和仿真设计流程的改变:反相器:八位反相器:与非门:四位与非门:位逻辑操作运算符:多位宽电路符号图画法(打斜杠写数字):代码结构:时间作者module 功能timescalemodule (端口名)端口属性【输入输出】输入输出关系endmodulemodule testbench; // testbench 没有端口,不带括号,但要写分号定义输入输出,输入 reg,输出 wire,把信号接到例化后的 module 里面。异名例化 m原创 2021-11-17 19:17:18 · 528 阅读 · 0 评论 -
0 - ModelSim 仿真
ModelSim 仿真1、切换工作目录(.v 文件所在目录)【File-Change Directory】代码:cd C:/Users/16041/Documents/Verilog/Course2、创建 Library【File-new-Library】缺省名称为 work - work也可使用代码://在当前目录建立逻辑库 work,运行后会在当前目录下找到 work 文件夹。vlib work//映射逻辑库名到指定的目录vmap work work3、编译 Compile原创 2021-11-16 14:49:06 · 451 阅读 · 0 评论