-
文章目录
- 9. 编译预处理语句
- 9.1 仿真时间标度
- 10. Verilog HDL测试方法简介
9. 编译预处理语句
- 这些在C语言中都有涉及,但是在硬件描述语言中相对用的不是特别多,比如说include,在语言用的特别多,但是在硬件描述语言很少include,因为如果要建库,一定会通过use lib在软件中把库建了
9.1 仿真时间标度
- 因为用的不多,所以只讲`timesclae
- 很重要的概念,决定了工作效率,用合适的时间仿真合适的电路,这样会好一些
- `timescale 命令用来说明跟在该命令后的模块的时间单位和时间精度。
- 举例:
(1)
表示模块中所有的时间值都是 1ns 的整数倍。这是因为在timescale 命令中,定义了时间单位是1ns。因为timescale 命令定义的时间精度为 1ps,所以模块中的延迟时间可表达为带三位小数的实型数(time和realtime)。
(2)
该例中,模块中的时间值均为 10s 的整数倍。timesacle 命令定义的时间单位是 10s延迟时间的最小分辨度为十分之一微秒(100 s)即延迟时间可表达为带一位小数的实型数
(3)
该例中,`timescale命令定义了模块 delay_tb 的时间单位为 10ns、时间精度为1ns因此在此测试模块中,所有的时间值应为 10s 的整数倍,且以 1ns 为时间精度。这样经过取整操作,存在参数d中的延迟时间实际是 16ns(即1.6x10ns),这意味着在仿真时间为 16n时寄存器set 被赋值0,在仿真时间为32ns 时存器set 被赋值1。
!!对于仿真的时序要求非常高,代表了计算能力的有效使用
10. Verilog HDL测试方法简介
- 如何衡量一个测试是不是好的,完备的,有效的?实际上有不同的测试方法
- 完全测试法
对于复杂的设计来说,常常通过检查代码的覆盖率来检查验证工作是否完成。代码覆盖率可以指示 Verilog HDL代码描述的功能有多少在仿真过程中被验证过。通常代码覆盖率包括以下内容:
(1)语覆盖率
(2)路径覆盖率
(3)状态机覆盖率
(4)触发覆盖率
(5)表达式覆盖率
!!!!在对覆盖率检查的时候,希望越高越好,但是不可能达到100%,因为有一些条件表达式,比如case有一个分支,虽然程序状态都满了,但是分支必须要加进去,因为综合工具没有这个语句可能报一个错误或者warning。因为做硬件描述语言首先希望编译和综合之后的warning尽量少,在编译尽可能少的情况下,对所有的warning必须要有合理的解释,比如端口连接没有连;第二个就是仿真,就会考虑到你是不是充分, 这 时 候 就 会 有 覆 盖 率 的 检 查 这时候就会有覆盖率的检查 这时候就会有覆盖率的检查,覆盖率检查不可能100%,但是通常都是99.几%,要尽可能提高覆盖率 - 随机测试法
(1)在 Verilog HDL中提供了多个用于随机测试的系统命令,通常使用随机测试的系统函数来仿真真实应用的情况,如在通信领域中常用的帧同步搜索电路需要从接收的数据流中检测发送端固定插入的某个特殊的码型,而数据本身也有可能包括该码型,在这种情况下进行随机化测试就更接近于真实应用的情况。其中最常用的系统命令是随机数产生系统任务Srandom。
(2)!!在现在的超大规模的集成电路中,主要用的都是随机测试法,通过样本空间的样本序列产生足够多的样本来产生覆盖
(3)!!随机测试的概念是非常重要的,比如说手机芯片的测试,这是测不出来的。因为每个人打电话的语句都不一样,产生的东西都不一样;浏览网页,访问的网页也不一样,等等。在这这些不一样的情况下,要求不一样的测试是不可能的,所以一定是随机测试。但是基本结构是一样的,比如4G,5G要求10ms或者20ms的帧的形式。 - 自动测试法
在集成电路测试领域,全面准确地测试才能保证大规模集成电路的正常工作,而确保一个设计能够得到全面测试的唯一途径就是实现任务的自动化。通常通过创建一个检验表使用相应个数的采样值来完成自动测试。当修改过源代码后,所有的测试程序都自动被再次执行。但需要注意的是,使用自动测试可能会存在截断误差。