verilog程序设计
verilog设计
白开水不甜
走过那黯淡无光的黑夜才能看到黎明
展开
-
逻辑仿真/形式验证/硬件仿真
随着硬件设计复杂性的不断增加,为了能够最大程度的使得验证收敛,验证方法也越来越多主要包含:逻辑仿真,形式验证,硬件仿真。一、逻辑仿真从我们整个芯片的验证过程来讲,基于软件的逻辑仿真在验证中仍然起着举足轻重的作用,整个项目中的功能验证都是通过逻辑仿真来进行验证。优点:逻辑仿真的工具可以在标准的服务器上运行,不需要为它定制特定的服务器,减少了验证成本;在模块级别的功能验证上,逻辑仿真工具的编译速度和仿真速度很快,这在一定程度上会加快我们整体项目的验证速度;工程师对逻辑仿真验证过程的进行有很好的控制转载 2021-05-26 21:01:01 · 1478 阅读 · 0 评论 -
亚稳态与单比特、多比特信号跨时钟域传输
1、基础知识传播延迟(Tpd)从第一个触发器的输出,传播到第二个触发器的输入所花费的时间;解决高传播延迟的方法:1、降低时钟频率2、将逻辑分解为多个阶段(流水线)建立时间(Tsu,setup):在时钟上升沿到达之前,输入到触发器稳定所需的时间。保持时间(Th,hold):在时钟沿之后,输入到触发器稳定所需的最短时间。假设Tco表示触发器时钟有效到数据输出的时间;Tpd表示传播延迟,Tsu表示建立时间,不考虑时钟偏斜,那么最小时钟周期为:Tmin = Tco + Tpd + Tsu;2、原创 2021-04-01 21:51:40 · 1683 阅读 · 0 评论 -
verilog 序列检测模块 task用法
检测“1001101010”序列module xlj( input clk, input rst_n, input signal, output reg valid ); reg [3:0] state;parameter IDLE = 0;parameter S1 = 1;parameter S2 = 2;parameter S3 = 3;parameter S4 = 4;parameter S5 = 5;parameter S6 = 6;parameter S7 = 7;原创 2021-07-29 15:41:03 · 414 阅读 · 0 评论 -
verilog 随机数的用法
1、$random % b表示(-b+1):(b-1)中的随机数2、{$random} % b表示 0:(b-1)中的随机数3、产生一个在min, max之间随机数rand = min+{$random}%(max-min+1);原创 2021-07-29 15:32:19 · 3974 阅读 · 0 评论 -
常用设计模块 verilog
1、延时模块module delay_sig #(parameter DELAY = 10)( input clk, input sig_i, output sig_o);reg [DELAY-1 : 0] sig;always @(posedge clk) begin sig <= {sig[DELAY-1-1:0],sig_i};endassign sig_o = sig[DELAY-1];endmodule原创 2021-07-14 15:13:22 · 245 阅读 · 0 评论 -
Verilog 串行FIR滤波器、并行FIR滤波器设计、FIR IP核实现
fpga设计使用MATLAB设计一个2kHz采样,500Hz截止的15阶低通滤波器(h(n)长度为16),量化位数为12bit,输入信号位宽也为12bit。根据FIR直接型结构可知,滤波器实际上就是一个乘累加运算,且乘累加的运算次数由滤波器的阶数来决定。由于FIR滤波器大多是具有线性相位的滤波器,即滤波器系数呈一定的对称性。串行FIR实现即串行实现滤波器的累加运算,每级延时单元与相应系数的乘积结果进行累加后输出,整个滤波器只需要一个乘法运算单元。全串行结构:对称系数的加法运算也由一个加法器串行实现原创 2021-06-04 22:32:33 · 4840 阅读 · 4 评论 -
Verilog matlab与FPGA文件的输入输出
1、产生FPGA仿真需要使用到的正弦波采样数据,10bit量化,以二进制形式写入文本:%设置参数fi=5000;L=1024;N=10;fs=20000;%产生信号t=0:1/fs:(L-1)/fs;theta=rand()*2*pi;si=sin(2*pi*fi*t+theta);f_s=si/max(abs(si)); %归一化Q_s=round(f_s*(2^(N-1)-1)); %10bit量化fid=fopen('C:\Users\HLPC\Desktop\原创 2020-11-07 22:10:39 · 3222 阅读 · 6 评论 -
Verilog 状态机设计
Moore 型状态机Moore 型状态机的输出只与当前状态有关,与当前输入无关。输出会在一个完整的时钟周期内保持稳定,即使此时输入信号有变化,输出也不会变化。输入对输出的影响要到下一个时钟周期才能反映出来。这也是 Moore 型状态机的一个重要特点:输入与输出是隔离开来的。Mealy 型状态机Mealy 型状态机的输出,不仅与当前状态有关,还取决于当前的输入信号。Mealy 型状态机的输出是在输入信号变化以后立刻发生变化,且输入变化可能出现在任何状态的时钟周期内。因此,同种逻辑下,Mealy 型原创 2020-11-05 21:22:23 · 920 阅读 · 3 评论 -
verilog FFT Vivado IP核实现
1、首先用matlab产生16bit二进制正弦信号,存入rom:%设置参数fi=5000;L=1024;N=16;fs=20000;%产生信号t=0:1/fs:(L-1)/fs;theta=rand()*2*pi;si=sin(2*pi*fi*t+theta);f_s=si/max(abs(si));Q_s=round(f_s*(2^(N-1)-1));fid=fopen('C:\Users\HLPC\Desktop\Sin.txt','w');for k=1:length(原创 2020-11-09 20:30:41 · 2546 阅读 · 14 评论 -
计数器架构
计数器三要素——初值、加1条件和结束值always@(posedge clk or negedge rst_n)begin if(~rst_n) cnt <= 0; else if(加1条件:add_cnt)begin if(结束条件:end_cnt) cnt <= 0; else cnt <= cnt + 1; end endassign add_原创 2021-06-04 20:25:52 · 155 阅读 · 0 评论 -
verilog 分频电路设计 -- 奇偶分频、小数分频
1、奇偶分频module fre_div#(parameter DIV_NUM = 5)( input clk, input rst_n, output clk_div ); reg [3:0] cnt_div;wire clk_odd_div;reg clk_even_div;always @(posedge clk or negedge rst_n)begin if(~rst_n) cnt_div <= 4'd0; e原创 2021-03-27 16:05:25 · 954 阅读 · 0 评论 -
verilog 同异步FIFO 格雷码
1、定义FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集, 另一端是计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K×16bit=1.原创 2021-03-30 15:09:07 · 451 阅读 · 0 评论 -
verilog 二进制转BCD码
1、计算过程先将BCD码计数器清零,之后将二进制数和BCD码计数器统统左移,二进制数移出来的最高位放到BCD码计数器的最低位,如下表所示!每一次移位之后都判断下,BCD码计数器的十、分以及个位是否大于4,如果任何一位(4bit)大于4,则对其加3,之后继续移位,如此下去,直到移位次数为二进制数的位数之后,停止移位,此时得到的BCD码计数值便是转换后的值。2、实现module bin2bcd( input clk, input rst_n, input en, inp原创 2021-04-02 17:53:37 · 2627 阅读 · 14 评论