IC设计和验证
文章平均质量分 88
集成电路设计和验证的方方面面
笨牛慢耕
谋生:信号处理,无线通信,芯片设计
兴趣:数理计算机人工智能
遗憾:世界如此丰富,而我如此无知
铭记:日拱一卒终身成长;忠于内心远离油腻;成就自己照亮周围
寄语自己:愿你历尽劫波,内心永远少年
展开
-
数字电路仿真编译文件指定方式
一个设计通常可能会可以通过预处理器宏开关来控制其中的配置情况或者设计选项的切换,本质上是切换编译范围。有时也通过宏来指定设计参数。比如说一个DMA的设计,4个通道还是8个通道,在编译时指定宏的值来决定按几个通道进行设计配置,也同样可以在命令行或者file.lst指定宏的定义,这里有两种情况。如下所示(最后两行):+libext+.v其中,NUM_CH对应于设计中使用到的一个参数类的宏,比如说用于指定通道数为8个。原创 2023-05-26 21:11:21 · 2493 阅读 · 0 评论 -
GNU Makefile variable assignments =, ?=, := and +=
关于GNU makefile中四种不同的赋值操作的简单介绍原创 2022-04-09 21:55:33 · 599 阅读 · 0 评论 -
SystemVerilog: 仿真验证知识点点滴滴
SystemVerilog: 验证知识点点滴滴(随机动态更新)Class代表软件世界,Module代表硬件世界,Interface是连接软件世界和硬件世界的桥梁,但是更加偏硬件一些。Package也是软件世界的,相当于是SV中用于定义namescope的东西。Interface和Module(由于含有硬件世界的成分)不能包含在(属于软件世界的)Package中。类中的成员(数据、函数、任务)缺省地都是automatic类型。如果需要static类型成员的话,需要用static显式地声明。。。.......原创 2022-08-10 20:25:05 · 3773 阅读 · 0 评论 -
SystemVerilog: Randomization点点滴滴
零零碎碎地记载一些关于SystemVerilog随机化的问题,结合代码实验进行解析。以下的代码的运行均利用windows版的QuestaSim。关于基本的仿真命令使用方法可以参考:数字电路设计仿真方法入门。本笔记随时动态更新。..................原创 2022-08-04 14:53:25 · 2730 阅读 · 0 评论 -
常用数字设计仿真工具(Questa,VCS,IUS/Xcelium,Verdi等)使用入门
本文简要介绍一些主流的数字逻辑设计仿真器(比如说VCS,IRUN/Xcelium,ModelSim/QuestaSim等)的最基本用法。或许还会考虑一些设计验证辅助工具,比如说波形观测工具Verdi、Xilinx的Vivado等的基本使用方法。或许对入门者有些参考意义。(持续更新中).....................原创 2022-07-20 17:41:40 · 17654 阅读 · 6 评论 -
UVM寄存器模型:reg adapter实现和集成
UVM寄存器模型有内建的抽象的read()和write()等寄存器访问命令,实际的寄存器访问需要通过对用于寄存器访问的总线接口进行驱动来完成。典型的总线接口有AMAB总线家族、I2C总线、SPI总线等都可以用作寄存器访问的总线接口。在UVM验证平台中,要完成寄存器访问,需要进行寄存器模型的抽象的read/write访问动作与具体种类总线的bustransaction之间的转换,这就是adapter(betweenregandbus)所要扮演的角色。...........................原创 2022-07-19 21:46:01 · 6553 阅读 · 10 评论 -
SystemVerilog: Dynamic part-select and array slicing
SystemVerilog中part-select与array-slicing的异同点,以及通用的动态处理的写法。原创 2022-03-14 13:21:55 · 2369 阅读 · 0 评论 -
Spyglass SYNTH_5273错误
目录问题解决方案1解决方案2问题用spyglass进行语法检查,报告以下错误:[DC] SYNTH_5273 SynthesisError ../../src/PDP_RAM.v 32 1000 PDP_RAM -> Number of bits (16384) for net/variable 'mem' is greater than mthresh value 4096. Set the 'mthresh' parameter to a...原创 2022-02-25 12:55:03 · 3716 阅读 · 2 评论 -
SystemVerilog: 打印显示之数据格式控制及特殊字符详解
扼要介绍SystemVerilog中打印显示tasks中的特殊字符以及数据格式等控制,并辅以相应的代码示例。原创 2022-01-25 18:12:25 · 14440 阅读 · 0 评论 -
Systemverilog: $display/$write/$strobe/$monitor异同及代码示例
总结了$strobe, $display, $monitor, $write的差异点,并基于代码示例给出来形象的对比。最后还留下一个有趣的仿真结果疑问留待高手答疑解惑原创 2022-01-24 19:03:30 · 5988 阅读 · 4 评论 -
Systemverilog: I/O System Tasks and Functions使用说明
SystemVerilog的输入输出系统任务和函数(Input/Output System tasks and functions)可以如下表所示分为五大类:Display Tasks; File I/O tasks and functions; Memory Load/Dump tasks; Command Line Input; VCD tasks. 本文(系列?)分别针对各大类任务的使用方法进行详细介绍,并辅以相关的代码示例。原创 2022-01-24 11:31:30 · 986 阅读 · 0 评论 -
SystemVerilog: always, always_comb, alwasy_ff, always_latch
概要性地介绍Systemverilog中的always, always_comb, always_ff, always_latch的异同点,以及正确的使用方法原创 2021-08-16 12:08:57 · 8535 阅读 · 1 评论 -
SystemVerilog: 动态数组
详细介绍SystemVerilog中动态数组的使用方法,附有丰富的代码例原创 2021-09-28 12:43:15 · 14261 阅读 · 7 评论 -
SystemVerilog: What is and why to use pass-by-reference?
1. What is pass-by-reference?From section 13.5.2 inIEEE Std 1800-2012: Arguments passed by reference are not copied into the subroutine area, rather, a reference to the original argument is passed to the subroutine. The subroutine c...原创 2021-08-15 17:59:24 · 740 阅读 · 1 评论 -
异步复位,同步释放
跨时钟域(CDC)问题的一个常见又特殊的例子是异步复位。作为一个初级设计者,最好是不要使用异步复位,而总是使用同步复位。但是随着设计复杂度的提高,特别是在系统层面,总会碰到必须使用全局异步复位的情况。异步复位信号的问题关键不在于异步复位信号的assertion,而在于复位信号的解除(或释放, release)。复位的发生是异步的并没有什么问题,只要确保复位的解除是同步的就可以避免系统会出现跨时钟域处理常见的亚稳态现象。 一个好的做法是的系统的顶层统一地对异...原创 2021-09-20 17:57:47 · 644 阅读 · 2 评论 -
送给FPGA新人的一些建议
本文简单地列举了一些给FPGA新人的建议,动态更新中。。。[1] 把你的设计限制在一个时钟域内,或者说尽量确保你的设计为单时钟域设计 如果必须使用两个时钟域的话,那就需要充分考虑跨时钟域处理了。 如果输入时钟频率不是你所需要的频率,那就用PLL/MMCM等进行处理生成你所需要的时钟频率。除非能够确信片外输入的时钟的质量,否则的话,即便不需要变更时钟频率,让它通过PLL/MMCM后再使用总不会是坏事情。[2] 不要使用时钟下降沿...原创 2021-09-19 16:53:44 · 579 阅读 · 4 评论 -
SystemVerilog: reference argument is illegal inside static task-function declaration
1. 问题描述在systemverilog仿真中碰到仿真器报告如下错误:ncvlog: *E,REFANA (common.sv,4|26): reference argument is illegal inside static task-function declaration. 出问题的是一个function,其定义如下:function automatic void DataRead( input int num_data, ...原创 2021-08-14 16:53:26 · 1484 阅读 · 1 评论 -
Vivado综合结果解读
1. 概要本文基于一个实际设计项目的综合作业进行整理总结,以期对将来的FPGA开发能够有所帮助。并作为今后进一步总结提高的基础,方便设计经验的累进式提高(incremental improvement)。2. 综合结果摘要Vivado综合(注意,在本文中“综合”是指整个流程即SynthesisàImplementationàWrite bitstream,当用Synthesis这个词时则表示其中特定的Synthesis这个环节)结束后会出现以下一个汇总摘要就结...原创 2021-07-30 14:09:10 · 11872 阅读 · 2 评论 -
三态(tri-state)门、双向(bi-directional)端口的建模、仿真和综合
双向端口顾名思义是一种既可以作为输入端口接收数据,也可以作为输出端口发出数据,它对数据的操作是双向的。比如某个设计需要一个 16 位的数据输入口和一个16 位的数据输出口,并且数据输入和输出不会同时发生。 如果数据输入口和输出口分别设计则需要32根数据线,而用双向端口来设计,则只需要16根数据线,这样就节省了16根数据线引脚。在很多情况下,芯片端口是宝贵的设计资源,而且芯片间的连线少对于板级设计也非常有利。因此,双向端口常用于芯片间需要进行半双工双向通信的场合,可以节省一半芯片...原创 2021-07-24 10:56:30 · 7135 阅读 · 2 评论