verilog
踩坑记录
通信->算法->IC
展开
-
verilog 大小端转换 38译码器 边沿检测 ROM 格雷码计数器
项目场景:`timescale 1ns/1nsmodule function_mod( input clk, input rst_n, input [3:0]a, input [3:0]b, output [3:0]c, output [3:0]d); function [3:0] data_rev; // 函数名和返回变量名相同 data_rev input [3:0] din; // 声明输入端口 begin原创 2022-03-10 12:44:37 · 484 阅读 · 0 评论 -
verilog 异步复位的串联T触发器 四选一多路器 奇偶校验 移位运算与乘法
异步复位的串联T触发器:由真值表可知,T=1时, Qn+1 = ~ Qn ,T=0时, Qn+1 = Qn即:输入为1下时,输出0到1到0不断翻转,输入为0锁存上一个时序结果。所以串联T触发器:// 第1个触发器输出为q1,第2个触发器输出为q`timescale 1ns/1nsmodule Tff_2 (input wire data, clk, rst,output reg q ); reg q1; always@(posedge clk or negedg原创 2022-03-08 21:15:01 · 873 阅读 · 0 评论 -
verilog 同步fifo
同步fifo的实现:// 同步fifo的实现module sy_fifo( input wire clk, input wire rst_n, input wire wr_en, // 写信号 input wire[7:0] data_in, // 输入 input wire rd_en, // 读信号 output wire full, // 写满 output reg [7:0] data_out, // 输出原创 2022-03-08 16:47:50 · 420 阅读 · 0 评论 -
verilog 跨时钟域 单bit延迟打拍 多bit延迟采样 多bit计数延迟采样
项目场景:module slow2fast_delay_clap( input clk1, input sig1, input rstn, input clk2, output sig2); reg[2:0] sig2_r; always@(posedge clk2 or negedge rstn)begin if(~rstn) sig2_r <= 3'b0; else sig2_r <= {sig2_r[1:0],sig1}; end原创 2022-03-06 18:22:32 · 4839 阅读 · 4 评论 -
verilog 3段式状态机
3段式状态机:3段式状态机写法,写出下图状态转换图。1 确定输入输出信号,及其类型(是wire还是reg);2 声明内部信号,一般需要定义current_state和next_state;3 用3个always语句描述状态机。第一个用来次态和现态的转换,第二个always用于现态在输入情况下转换为次态的组合逻辑;第三个语句用于现态到输出的组合逻辑输出。// 3段式状态机写法,写出上图状态转换图。module finite_fsm(output reg z_o,input clk,原创 2022-03-05 17:16:16 · 8149 阅读 · 0 评论 -
System Verilog 语法1
$display:作用是控制台输出信息$display("Start simulation") //显示字符串$display("data_play = %h hex", 100) //显示data_play的16进制数(或者其他进制)$display("Simulation time is %t", $time) //显示仿真的时间常数 变量:SV 中的 logic 数据类型和 Verilog 中的 reg 类型是一样的,可以互换使用,更多的是兼容 wire原创 2022-02-12 21:02:36 · 2898 阅读 · 0 评论 -
verilog 奇偶分频
二分频:// 用D触发器做个二分频的电路// 在时钟每触发2个周期时,电路输出1个周期信号。module div2(clk,rst,clk_out);input clk,rst;output reg clk_out;always@(posedge clk)begin if(!rst)begin clk_out <= 0; end else begin clk_out <= ~clk_out; // 时钟每触发1个周期时,电路原创 2022-03-02 16:15:59 · 205 阅读 · 0 评论 -
verilog HDLBits Verilog语法
逐位逻辑运算符(&,|)和逻辑运算符(&&,||)之间的差别:逐位逻辑运算符:对于 N 比特输入向量之间的逻辑比较,会在 N 比特上逐位进行,并产生一个 N 比特长的运算结果。逻辑运算符:任何类型的输入都会被视作布尔值,零->假,非零->真,将布尔值进行逻辑比较后,输出一个 1 比特的结果。// 模块有两个 3bit 宽的输入变量 a,b ,要求输出 a,b 逐位或的,a,b 逻辑或以及 a,b 按位取反的结果,其中 b 在高位。module top_mod原创 2022-02-08 22:06:05 · 2748 阅读 · 0 评论 -
verilog function task
function: task:原创 2022-01-30 22:19:20 · 450 阅读 · 0 评论 -
verilog 序列检测器 状态机 寄存器写法
状态机写法能够检测重叠部分// 2022-1-30 verilog学习// 检测序列1011 状态机写法module seq_detect( clk, res, en, din, match );input en,din,res,clk;output match;reg[2:0] state;reg match;always@(posedge clk or negedge res)if(~res) begin match<=0原创 2022-01-30 21:54:37 · 1100 阅读 · 0 评论 -
verilog D触发器
只有时钟clk:Q由D控制,Q=D,但在clk时钟上升沿才会改变// 2022-1-27 verilog 学习// D触发器 `timescale 1ns/10psmodule dff1(clk, d, q);input clk,d;output q;reg q; // 由always敏感变量控制的量是regalways @(posedge clk) // 只在时钟上升沿改变begin q <= d;endendmodule// -----.原创 2022-01-29 19:10:09 · 14890 阅读 · 2 评论 -
verilog 乘法器 integer/reg型 左移 右移 repeat while
integer 型,reg型:integer类型默认32位宽的二进制寄存类型,reg型需要明确定义其位数// 2022-1-26 verilog 学习// parameter与localparam// integer类型默认32位宽的二进制寄存类型,reg型需要明确定义其位数module EXAPL( r, g );parameter s=4; // 参数soutput[2*s:1] r; // 8位输出变量output[2*s:1] g;原创 2022-01-27 17:15:48 · 1091 阅读 · 1 评论 -
verilog 延迟时间 超前进位加法器
延迟时间:如图4位全加器,此类进位输出,像波浪一样,依次从低位到高位传递, 最终产生结果的加法器,也因此得名为行波进位加法器(Ripple-Carry Adder,RCA)。其关键路径如图中红线所示:假设经过一个门电路的延迟时间为T,则其延迟时间为(T+T)*4+T=9T。串行的全加器,缺点相当明显,即加法器的延时过高,电路的工作频率低。 对于一个 n bit 的行波加法器,其延时为(T+T)*n+T=(2n+1)T。超前进位加法器:超前进位加法器 (Carry-Lookahead Adde原创 2022-01-26 21:09:38 · 2411 阅读 · 1 评论 -
verilog 数据流描述 行为描述 结构化描述
数据流描述 assign:即信号从输入流向输出,并不会在其中存储。 没有reg,只有assign。数据流描述中最基本的语句是assign连续赋值语句。eg: 4位全加器// 4位全加器module Full_Add_4b_1(A, B, Cin, Sum, Cout); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; assign {Cout, Sum} = A + B + Cin;原创 2022-01-26 17:55:01 · 1144 阅读 · 0 评论 -
verilog 4选1多路选择器 case
MUX41a.v:// 2022-1-25 verilog 学习// 组合逻辑电路,不需要时钟控制,信号一来就输出// 4选1多路选择器`timescale 1ns/10psmodule MUX41a( a, b, c, d, s1, s0, y );input a,b,c,d;input s1,s0;output y;reg y; // always块被赋值量定义为regalways@(a or b..原创 2022-01-25 17:23:35 · 1827 阅读 · 0 评论 -
verilog 半加器 全加器 数据流级描述 结构性描述 行为级描述
h_adder.v:// 2022-1-25 verilog 学习// 组合逻辑电路,不需要时钟控制,信号一来就输出// 半加器`timescale 1ns/10psmodule h_adder( a, b, so, co );input a;input b;output so; // 进位,异或 so = a^b;output co; // 本位,与,co = a&b;assign so = a^..原创 2022-01-25 16:45:16 · 2635 阅读 · 0 评论 -
EDA 电子设计自动化
EDA Elctronic Design Automation 电子设计自动化:1. 前端设计:RTL设计,RTL仿真,硬件原型验证,电路综合2. 后端设计:版图设计,物理验证,后仿真物理指标:制作工艺,裸片面积,封装性能指标:速度,功耗功能指标:功能描述,接口定义IC设计制造FPGA (Field-Programmable Gate Array,现场可编程门阵列) / CPLD (Complex Programmable Logic Device,复杂可编程逻辑器件) 应用PCB(印原创 2022-01-24 20:42:41 · 340 阅读 · 1 评论 -
verilog 串口指令处理器
UART_TXer 输出给上位机项目场景:// 2022-1-23 verilog学习// 串口指令处理器`timescale 1ns/10psmodule cmd_pro( clk, res, din_pro, en_din_pro, dout_pro, en_dout_pro, rdy ); input clk; input res; input[7:0] din_..原创 2022-01-23 23:36:04 · 677 阅读 · 0 评论 -
verilog 串口数据发送
UART_TXer.v:// 2022-1-23 verilog学习// 串口发送模块`timescale 1ns/10psmodule UART_TXer( clk, res, data_in, en_data_in, TX, rdy ); input clk;input res;input[7:0] data_in; // 准备发送的...原创 2022-01-23 20:51:23 · 973 阅读 · 0 评论 -
verilog 串口数据接收 同名、异名例化
UART_RXer.v:// 2022-1-23 verilog 学习// 串口接收`timescale 1ns/10psmodule UART_RXer( clk, res, RX, data_out, en_data_out ); input clk;input res; input RX;output[7:0] d...原创 2022-01-23 16:48:26 · 2302 阅读 · 0 评论 -
verilog 状态机 case 三角波发生器 阻塞非阻塞赋值
阻塞、非阻塞赋值:非阻塞赋值:非阻塞赋值(non-blocking) 赋值语句(b<= a):并未立刻被赋值,而是调度到事件队列中等待执行,这是非阻塞赋值的特点。b的值被赋成新值a的操作, 是与块内其他赋值语句同时完成的。eg:if(con_syn==15)begin sigma <= d_12; // 1 data_out <= sigma; // 2 syn_out <= 1; // 3endif块中1句,2句,3句同时进行,实际是.原创 2022-01-22 22:31:41 · 1005 阅读 · 0 评论 -
verilog 相邻16点相加输出
sigma_16p.v://2022-1-22 Verilog学习// 相邻16点相加`timescale 1ns/10ps// 定义端口 时序逻辑:时钟,复位module sigma_16p( clk, res, data_in, syn_in, // 采样时钟 data_out, syn_out );// 定义端口属性input clk;inp...原创 2022-01-22 20:23:46 · 758 阅读 · 0 评论 -
verilog 秒计数器
24M, 十进制24000000转换为2进制是25位s_counter.v:// 2022-1-21 verilog学习// 秒计数器 0-9循环`timescale 1ns/10psmodule s_counter( clk, res, s_num );input clk;input res;output[3:0] s_num;parameter frequency_clk = 24; // 24MHzr..原创 2022-01-21 20:27:15 · 1562 阅读 · 1 评论 -
verilog 4级伪随机码发生器 时钟 复位
不能全0:4位除去0000,还有15种项目场景:modelsim 仿真:只加入选中信号(selected),不加入object中所有信号(in region)触发器 d[i] 是触发器 d[i-1] 的后移原创 2022-01-20 22:45:43 · 264 阅读 · 0 评论 -
verilog 计数器 时钟 复位
posedge clk // clk时钟上升研posedgenegedge res // res复位下降沿negedgecounter.v:// 2022-1-20 verilog 学习// 计数器 时序逻辑一定有触发器,触发器一定有时钟信号clk和复位信号res`timescale 1ns/10psmodule counter( clk, res, y );input clk; // 对时钟计数,时钟信号是输入.原创 2022-01-20 20:40:34 · 1938 阅读 · 0 评论 -
verilog 7段数码管译码器
sed_dec.v:// 2022-1-20 verilog学习// 七段码译码器 a-g7根管`timescale 1ns/10ps;module sed_dec( num, a_g );input[3:0] num;output[6:0] a_g; // a_g -->{a,b,c,d,e,f,g}reg[6:0] a_g; // always赋值需要定义为reg变量always@(num)b..原创 2022-01-20 19:30:09 · 5879 阅读 · 0 评论 -
verilog 组合逻辑设计与仿真 assign always case
组合逻辑代码设计:assign y=sel?(a^b):(a&b); // sel=1,a^b(异或);sel=0,a&b(与)always@(a or b or sel)assignfn_sw.v// 2022-2-17 Verilog学习// 二选一逻辑设计 swit选择`timescale 1ns/10psmodule fn_sw(// 定义端口 a, b, sel, y);// 定义端口属性input a;..原创 2022-01-17 15:17:35 · 2021 阅读 · 0 评论 -
verilog 一位/多位与非门的设计与仿真
一位与非门 nand_gate.v:// 2022-1-16 verilog学习// 与非门 (与and,非n,与非门nand_gate)`timescale 1ns/10psmodule nand_gate(// 定义端口 A, B, Y );// 定义端口属性input A;input B;output Y;assign Y=~(A&B);endmodule// testbench 测试台module na..原创 2022-01-16 21:52:58 · 1466 阅读 · 0 评论 -
verilog 反相器的设计与仿真
inv.v:编译器UltraEdit// 2021-1-15 verilog学习// 反相器设计`timescale 1ns/10ps // 一个时间单位 1ns,精度是10psmodule inv(A,Y);input A; // 输入端口output Y; // 输出端口assign Y=~A; // 输入输出关系 ~取反endmodule// testbench of inv 测试台module inv_tb; // 测试台没有测试端口,不用括号:..原创 2022-01-16 19:00:03 · 1184 阅读 · 0 评论