自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Clock Wizard IP核的使用

Clock Wizard IP核的使用DCM()实际上就是一个DDL,可以对输入时钟进行相位移动,补偿,产生倍频和时钟分频。PPL(锁相环) 相当与DCM,除了不能相移时钟,其他都一样。MMCM (模式时钟管理器),实现时钟的分频,倍频,相当于 ppl+dcm结合体(一般选这个)时钟管理IP核并不能产生任意频率的时钟信号。 产生的时钟信号与输入之间仅能是M/N的关系,其中M、N必须是整数。其中 .locked 为1表示,IP核不能正常工作, .locked 为0,表示IP核正常工作。...

2022-02-02 09:20:58 3878

原创 FIFO IP核的使用

FIFO IP核的使用什么时候用FIFO:不同时钟域的数据缓存,不同速率模块间的数据传输。(其他方法双口RAM,信号握手,高时钟采样,同步器等)做位宽匹配,实际上也是一种缓存单元,例如单片机的8位数据输出,而DSP可能是16位数据输入,在单片机与DSP链接时就可以使用FIFO,写入一个数据,触发2次读操作。做相位补偿。FIFO 的延时: 异步fifo,空满信号存在延时。FIFO 的full 和 empty 标志写满以后 full 拉高;读空以后 empty 拉高;端口类型。一般选择第一个

2022-01-31 23:12:29 2086

原创 Verilog数据位数转换方法(拼接)

方法一:舔“0”将24 * 12位的 i_data_ch0, i_data_ch1 与0000 拼接成了 24*16位方法二:运用状态机将24 * 16位的数据 拼接成32*16

2022-01-30 09:05:52 2873

原创 如何测试IP核(RAM为例)

如何测试IP核(RAM为例)(读出数据有两个时钟的延时)了解RAM IP 核的几种工作方式。Simple Dual port RAM (简化双口RAM):A端只能写入,B端只能读出。Single Port RAM(单口RAM):只有一个端口(A),能对数据进行读写。True Dual port RAM(真双口RAM):两个端口(A、B都能进行读写)。由于工程需要这里使用Simple Dual port RAM思路:编写数据计数器,和地址计数器,分别对数据和地址赋值,写入RAM,

2022-01-28 09:31:47 2090

原创 一段式状态机,两段式状态机实例

一段式状态机parameter S0 = 3'd0; parameter S1 = 3'd1; parameter S2 = 3'd2; parameter S3 = 3'd3; parameter S4 = 3'd4; parameter S5 = 3'd5;always @ (posedge clk ) begin if ( rst ) begin <= 0; <= 0; <= 0; state <= S0.

2022-01-27 09:00:29 215

原创 相同功能多个alway和一个always

相同功能多个alway和一个always下面两种 写法功能是一样的,且占用的逻辑资源也是一样的(资源共享)。 因为在编译过程中编辑器能自动识别相同资源的代码,进行资源共享。 但第一种代码的可读性更高。工程上:尽量非变化语句“完全一致”时使用合并always ,否则还是使用多个always 方便阅读、...

2022-01-26 09:00:00 393

原创 always@(),alwyas@(*),always用法

always@(),alwyas@(*),always用法always@():常用就不多赘述了alwas(*): 使用这个可以创造组合逻辑。常用于两段式状态机的状态转换描述always:常用于TestBench 中对时钟进行定义。

2022-01-25 18:57:52 2227

原创 DDR4调试学习

5.尝试控制DDR4满速率读写:原因:项目自带(项目带锁)DDR4读写控制只能3个时钟读读一个数据。读写速率太低,DDR4利用率不高。写:读(读出数据有24个时钟延迟)通过编写测试程序查看DDR4能否满时钟写。可见只要 app_rdy 为高就能满时钟写入数据。通过编写测试程序查看DDR4能否满时钟读。通过时序图发现DDR能实现满时钟读写。...

2022-01-25 08:30:00 1217

原创 万兆网帧结构

|前导码(8B)|目标MAC地址(6B) |源MAC地址(6B)| 类型/长度(2B)| 数据(46B~1500B)| 帧校验序列(4B) |(1)前导码(Preamble)(64bit):由0、1间隔代码组成,用于通知目标站做好接收准备。(2)目标MAC地址(Destination Address)(48bit/6B):接收帧的工作站地址(3)源MAC地址(Source Address)(48bit/6B):发送帧的工作站地址(4)类型/长度(Type/Length)(16bit/2B)(5)数

2022-01-24 16:57:55 328

原创 unit测试以及on-unit

单元测试:‘单元’一般就是指函数,在面向对象的代码中指的是类。不可能只测试系统中的某一个函数或类。(函数常常套其他函数)(类会用到其他类)利用单元测试可以独立地对某一段代码进行测试。我们可以将测试分组以便在某些特定条件下运行某些特定的测试,并在其他条件下运行另一些测试。我们还可以迅速定位错误。如果认为在某段代码中存在着一个错误而且又可以在测试用具中使用这段代码的话,我们通常能够迅速地编写出一段测试,看看我们所推测的错误是不是真的在那里。测试的覆盖种类1.语句覆盖:语句覆盖就是设计若干个测试用例,

2021-01-24 10:43:46 275

原创 测试用例的设计

穷举的黑盒和白盒测试都是不可能的。使用特定面向黑盒测试的测试用例设计方法

2021-01-23 09:30:27 148

原创 软件中二进制表示十进制的近似度的错误

N 位二进制的小数的精度是1/2 的 N 次方。也就是说,N 位二进制数只能表示(1/2 的 N 次方)的整数倍的数。而M 位十进制的小数的精度是 1/10 的 M 次方。1/10 = 1/2 * 1/5。那么 1/5 这个数(即0.2),就不能用有限长的二进制小数来表示。说高一点,十进制可以表示的小数为:a/(2^b * 5^c) 其中 a、b、c 为整数。二进制可以表示的小数为:a/(2^b) 其中 ab 为整数。...

2021-01-22 20:26:10 164

原创 《软件测试的艺术》学习记录

软件测试的艺术:(测试是发现错误而执行程序的过程)一.端正自己的态度:测试是为了发现错误而执行程序。而不是证明软件不纯在错误。黑盒测试:(数据驱动测试或输入/输出驱动测试)(不太可能实现,1.经济学2.逻辑上)穷举输入测试:将可能的输入条件当测试用。白盒测试:(逻辑驱动测试)(不太可能实现1.逻辑路径太多2.不经济)穷举路径测试:测试执行程序的所有控制流路径。测试原则:1.测试用例中一个必需部分是对预期输出或结果进行定2程序员应当避免测试自已编写的程序,编写软件的组织不应当测试自己编"的软件

2021-01-22 20:10:40 137

原创 (2021/1/17笔试试题)C语言判断3个数能否构成直角三角形

思路:首先判断输入值能否构成三角形(这里可以排除输入不能构成三角形,和输入为负数 的情况)。在通过直角三角形的边的关系,判断是否为直角三角形软件:Visual C++ 6.0(成功实现) 为本科时学习C语言时最常使用的软件。尝试使用Visual Studio Code(未成功实现) 学习Html 时使用的软件,下载了C/C++编译器,但配置文件好像没弄好,运行程序时会中断.代码:#include <stdio.h>int main(void) { float

2021-01-20 09:41:08 1741

原创 fpga实现流水灯以及tb代码

本实验为某公司校招问题:本人在2021/1/17日完成. 分享给大家.使用FPGA设计一个简单的流水灯程序,红绿蓝三个LED闪烁即可。本文章提供Verilog的源代码,验证代码,以及简单的外围电路。Verilog代码:`timescale 1ns / 1psmodule led_flowing( input rst_n, input clk, output reg[2:0] led ); reg [12:0] counter; //编写Tb时采用1us的时钟信

2021-01-18 10:05:07 2314

转载 2021最新FPGA面试题

1、简述建立时间和保持时间 建立时间Tsu(setup):触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。 保持时间Th(hold):触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。关于上升沿触发器如何需要建立时间和保持时间的详细解释:https://www.cnblogs.com/ylsm-kb/p/9129699.html2、简述触发器和锁存器之间的差别 锁存器对电平信号敏感,在输入脉冲的电平作用下改变状态。 D触发器对时钟边沿敏感,

2021-01-09 18:30:26 4635 1

原创 TestBench的功能和编码原则

一.Test Bench 主要功能:简单来说就是:a.通过Verilog程序的行为描述,为待测信号提供激励信号b.设置理想结果。c.将输出结果与理想结果比较,判断内部功能结构是否正确。Test Bench 编码原则(全加器为例子)全加器Verilog实现代码:`timescale 1ns / 1psmodule add_4b( input clk, input rst, input [3:0] a, input [3:0] b, input cin

2021-01-09 13:17:10 1173

原创 用HTML实现旋转魔方!很有意思

实现效果:(旋转的截图体现不出来,可以自己下个sublime 复制我给的代码自己试试)。鼠标放在魔方上效果实现代码:<!DOCTYPE html><html><head> <title>旋转3D正方体</title> <meta charset="utf-8"> <style type="text/css"> img { width: 200px; height: 200px;

2021-01-08 19:58:21 1727 5

原创 学习记录(持续学习中): Verilog中四种循环语句:for循环,forever循环,repeat循环,while循环

1.for循环for是一种条件循环,在条件成立时才进行循环。语法形式 :for(初始赋值语句 ;条件表达式 ;赋值修改)语句或语句块;用for循环语句对存储器进行清0初始化:for(n=0; n < mem_size; n = n+1) mem(n)=32'h0;2.forever循环forever循环是一种无限循环。循环体内必须采用某种形式的时序控制,否则forever将在0时刻后一直循环下去。用forever语句产生时钟:initial begin clock = 0;

2021-01-07 22:11:39 10244 1

原创 学习记录(持续学习中):阻塞和非阻赛赋值,和使用原则

阻塞式赋值1.特点:a.当前语句执行完后才会执行下一条语句。赋值是立即发生的(无指定延时)b.执行过程中其他同类赋值语句必须停止工作。2.赋值方式:a.未指定延时赋值:目标变量名 = 驱动表达式;b.指定延时赋值方式有两种:C = #2 A+B;#2 C = A+B;非阻塞赋值1.特点:a.语句执行不会影响同一过程块中其他语句执行(不会阻塞)。b.多条非阻塞是同步赋值操作,具有并行执行的特点。2.赋值方式a.未指定延时: 目标变量名 <= 驱动表达式 ;b.指定延时赋

2021-01-07 19:23:03 144

原创 学习记录(持续学习中):异步清零和同步清零区别和各自优缺点。 异步复位和同步释放实现方法。

学习记录(持续改进):异步和同步的区别,以及各自的优缺点,以及异步复位和同步释放的实现方法1.异步 独立于时钟控制的复位控制端。(就是 rst, res_n,这些在always@的敏感信号表里) 这样在任何时刻只要复位信号一来,输出直接清0。异步清零D触发器Verilog描述2.同步控制信号只有在时钟边沿到来时才起作用。(控制信号不在always 敏感信号表中) 控制信号来了,不会马上清0,要等到下一个时钟信号到来,才会清零。同步清零D触发器Verilog描述异步电路优缺点:优:(学习中)

2021-01-07 18:35:11 8074 1

原创 学习记录(持续改进):COMS反相器

COMS方向器(非门)。COMS晶体管与非门,或非门。与非门构成的与门,或非门构成的非门。OD门(漏极开路输出门电路)

2021-01-07 16:03:58 801 1

原创 学习记录(持续改进)VIM的基本语法

打开vim :Vim +文件名称命令模式yy 复制所在行p 粘贴dd 删除所在行 2ddu:撤销刚刚的操作Ctrl+小写r:反撤销输入模式(插入,编辑) esc键a;下一个 输入i;当前为 输o; 下一行 输入末行模式(冒号,两点) esc键w 保存q 退出shift+zz 相当于wqwq! 保存...

2020-09-01 17:59:03 137

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除