IC 验证篇(09-03)覆盖率收集

本文详细介绍了芯片原厂在IC验证中的重要概念——覆盖率,包括代码覆盖率和功能覆盖率的定义、类型以及如何通过VCS仿真工具如VERDI生成覆盖率报告。强调了覆盖率的重要性及注意事项,如不要过度依赖代码覆盖率,应重点进行反标分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

芯片原厂必学课程 - 第九篇章 - IC 验证篇

09-03 覆盖率收集

新芯设计:专注,积累,探索,挑战

引言

  NOTES:本文来自《芯片原厂必学课程 - 第九篇章 - IC 验证篇》技术专栏


🌏 一、覆盖率收集

1. 覆盖率定义

  ✉ 覆盖率:指的是验证工作中至关重要的一个环节,通过覆盖率驱动的方式,不仅可以量化验证的进度,还能够保证验证的完备性

  ✉ CDV:指的是覆盖率驱动验证

2. 覆盖率类型

  ✉ 代码覆盖率:UT 验证比较重视,要求 100%

  ✉ 功能覆盖率:IT 验证比较重视,要求 100%

3. 代码覆盖率

  ✉ 行覆盖率 LINE COVERAGE:记录程序的各行代码被执行的情况

  ✉ 条件覆盖率 COND COVERAGE:记录各个条件中的逻辑操作数量被执行的情况

  ✉ 跳转覆盖率 TOOGLE COVERAGE:记录单比特信号的 0/1 跳转情况

  ✉ 状态机覆盖率 FSM COVERAGE:记录状态机的各个状态被进入的次数,以及各个状态之间的跳转情况

  ✉ 分支覆盖率 BRANCH COVERAGE:记录 if-else 等语句中各个分支被执行的情况

  ✉ 路径覆盖率 PATH COVERAGE:记录程序的各个分支是否都被执行的情况,亦称之为断言覆盖

09-03-01 代码覆盖率的种类

4. 功能覆盖率

  ✉ 定义:用户定义的,环境执行的,用于衡量被分解出来的验证点是否能够被测试到

  ✉ 分类:覆盖率组 COVERGROUP 和断言覆盖率 COVERPROPERTY

5. 覆盖率总结

  ✉ 不要过于相信和依赖代码覆盖率

  ✉ 重点做好代码覆盖率反标和分析

  ✉ 代码覆盖率的单一结果难以说明


🌏 二、如何输出覆盖率报告

  这里给出了一个能够运行 VCS 仿真,打开 VERDI 波形,输出 COV 报告,清除工程缓存的 MAKEFILE 脚本,通过如下的一些命令,即可完成

  ✉ make run

  ✉ make verdi

  ✉ make cover

  ✉ make clean

export WORKAREA=$(shell pwd | sed 's&/verification&&')

run:
    bsub -I \
    vcs -sverilog -debug_acc+all -R -o simv -full64 -debug_access -l sim.log sim.v \
    -top testbench \
    +incdir+${WORKAREA}/hdl/riscv/rtl \
    -f ${WORKAREA}/hdl/riscv/rtl/riscv_top.lst \
    -cm cond+line+branch+fsm+assert+tgl \
    -cm_dir cov/cov_test/cm -cm_log cov/cm.log \
    +lint=TFIPC-L \
    +lint=PCWM \
    +fsdb+force \
    +notimingcheck \
    +nospecify \
    +incdir+${WORKAREA} \
    +define+TSMC_16_ULP

verdi:
    bsub -I -J \
    verdi -n 2 -XF verdi sim.v -sv -ssf wave_000.fsdb \
    -top testbench \
    -f ${WORKAREA}/hdl/riscv/rtl/riscv_top.lst \
    -f ref.lst
    +tarmac_on \
    +incdir+../ \
    +define+TSMC_16_ULP &

cover:
    bsub -I urg -dir cov/cov_test/{cm, cm.vdb} -report urgReport
    firefox urgReport/dashboard.html &

clean:
    @rm -rf csrc/ *.txt novas* *.log simv* ucli.key verdiLog/ *.fsdb *vf cov/
<think>好的,我现在需要帮助用户了解如何在STM32CubeMX中进行配置。用户之前询问了关于HRTIM触发ADC分频的问题,现在转向了更基础的STM32CubeMX配置,可能是刚接触这个工具,或者想系统地学习如何使用它。 首先,我要考虑用户的使用场景。可能用户是一位刚开始学习STM32微控制器的开发者,或者是需要快速上手STM32CubeMX的工程师。他们可能不太熟悉图形化配置工具,需要详细的步骤说明。因此,我的回答需要结构清晰,分步骤解释,确保用户能逐步理解。 接下来,我需要确定用户的需求。用户可能想知道从零开始配置一个STM32项目的基本流程,包括时钟设置、外设配置、生成代码等。他们可能希望了解如何选择型号、配置引脚、设置时钟树、生成代码以及后续的调试步骤。此外,用户可能对高级功能如Middleware的配置也有兴趣,但作为基础,应该先覆盖主要步骤。 用户的深层需求可能不仅仅是步骤,而是如何有效利用STM32CubeMX提高开发效率,避免常见错误。因此,除了步骤外,还需要包含注意事项和最佳实践,比如时钟配置的注意事项、外设冲突的避免、代码结构的管理等。 现在,我需要组织回答的结构。按照逻辑顺序,从安装开始,到项目创建、时钟配置、外设设置、中间件(如果需要)、生成代码,再到后续开发。每个步骤需要简明扼要,但关键点不能遗漏,例如在时钟配置中强调HCLK的设置,外设配置中的模式选择等。 同时,要结合用户之前的提问,可能他们在配置定时器和ADC时遇到了问题,所以可以适当提到这些外设的配置位置,但不需要深入,因为当前问题更关注整体流程。另外,需要注意使用中文,避免专业术语的混淆,必要时进行解释,比如解释GPIO模式中的上拉下拉等。 最后,检查是否有遗漏的重要点,比如代码生成后的修改注意事项,或者常见错误的解决方法。例如,提醒用户避免在生成的用户代码区外修改代码,以免被覆盖。此外,提到调试工具的使用,帮助用户在配置后进行验证。 总结来说,回答需要全面覆盖STM32CubeMX的配置流程,步骤明确,重点突出,同时考虑用户可能的疑问和常见问题,提供实用的建议,帮助他们顺利开始STM32开发。</think>以下是使用 **STM32CubeMX** 配置STM32微控制器的详细步骤指南: --- ### **1. 安装与启动** - **下载安装**:从ST官网下载对应操作系统的CubeMX,安装时需勾选对应STM32系列的支持包(如STM32F4xx/H7xx等)。 - **启动软件**:首次启动会自动下载最新固件库(或手动通过`Help > Manage Embedded Software Packages`更新)。 --- ### **2. 创建新项目** 1. **选择芯片型号** - 点击 `File > New Project`,在搜索框中输入目标MCU型号(如`STM32F407VG`)。 - 或通过 `Board Selector` 按封装/外设筛选。 ![芯片选择界面](https://community.st.com/legacyfs/html/269356.png) 2. **配置项目属性** - 在 `Project Manager` 标签页设置: - **项目名称**:自定义(如`LED_Blink`) - **项目路径**:选择无空格/中文的路径 - **Toolchain/IDE**:选择MDK-ARM(Keil)、STM32CubeIDE等 --- ### **3. 系统核心配置** - **时钟源(Clock Configuration)** 1. 在 `Pinout & Configuration` 标签页,左侧导航栏选择 **System Core > RCC**。 2. 设置主时钟源: - **HSE(外部高速时钟)**:选择`Crystal/Ceramic Resonator`(若使用外部晶振) - **LSE(外部低速时钟)**:可选(用于RTC等) 3. 进入 **Clock Configuration** 标签页: - 调整分频系数,将`HCLK`设置为MCU支持的最高频率(如STM32F407为168MHz) - 确保时钟树无红色警告(超频会标红) - **调试接口** - 在 **System Core > SYS** 中启用调试模式(如`Serial Wire`用于SWD下载)。 --- ### **4. 外设配置(以GPIO和UART为例)** - **GPIO配置** 1. 点击MCU引脚图中的某个GPIO(如PA5),选择模式: - **Output Push Pull**(推挽输出) - **Input with pull-up/down**(输入带上拉/下拉) 2. 设置初始电平(`Output Level`)、标签(`User Label`)等。 - **UART配置** 1. 左侧导航栏选择 **Connectivity > USARTx**。 2. 设置模式为`Asynchronous`(异步通信)。 3. 配置参数: - **Baud Rate**:115200 - **Word Length**:8 bits - **Parity**:None 4. 在 **NVIC Settings** 中启用中断(如需接收数据)。 --- ### **5. 中间件配置(如FreeRTOS、FATFS)** - **FreeRTOS** 在 `Middleware` 中选择`FREERTOS`,配置任务堆栈大小、优先级等。 - **FATFS(文件系统)** 启用后需设置SDIO或SPI接口,并关联物理存储设备驱动。 --- ### **6. 生成代码** 1. 返回 `Project Manager` 标签页,检查代码生成选项: - **生成外设初始化代码**:勾选 - **为每个外设生成单独的.c/.h文件**:建议勾选(便于维护) 2. 点击 `GENERATE CODE`,等待生成完成。 --- ### **7. 代码开发与调试** - **用户代码区** - 在生成的`main.c`中,在`/* USER CODE BEGIN x */`和`/* USER CODE END x */`之间添加自定义代码(避免被CubeMX覆盖)。 - 示例:在`while(1)`循环中添加LED闪烁代码: ```c HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(500); ``` - **下载与调试** - 使用ST-Link/J-Link通过SWD接口连接开发板。 - 在IDE(如Keil)中编译并下载程序,通过调试器验证功能。 --- ### **注意事项** 1. **时钟配置**:确保HSE/LSE与实际硬件一致(开发板通常使用8MHz外部晶振)。 2. **外设冲突**:避免同一引脚被多个外设复用。 3. **功耗优化**:未使用的外设建议关闭时钟(在`Clock Configuration`中禁用)。 通过以上步骤,可快速完成从硬件配置到代码生成的全流程。实际开发中需结合具体需求调整外设参数(如ADC采样率、PWM频率等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新芯设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值