如何使用Python/C/C++生成含恒定频率方波的VCD文件
实现方案:生成恒定频率方波VCD文件
1. 实现原理
VCD(值变转储文件)是通用的波形记录格式,不需要依赖Verilog生成,直接按照VCD标准语法拼接文本即可,核心结构分为两部分:
- 头部定义区:声明时间单位、信号名称、位宽等元信息
- 数值变化区:按时间顺序记录信号的电平跳变点
2. 代码实现
2.1 Python实现(最简版本)
可直接运行,生成1MHz、占空比50%的方波VCD文件:
# 配置参数 TIME_SCALE = "1ns" # 时间单位 FREQ = 1e6 # 方波频率 1MHz DUTY_CYCLE = 0.5 # 占空比 TOTAL_CYCLES = 100 # 生成的方波周期总数 SIGNAL_NAME = "square_wave" OUTPUT_FILE = "square_wave.vcd" # 计算高低电平持续时间(ns) period_ns = int(1 / FREQ * 1e9) high_ns = int(period_ns * DUTY_CYCLE) low_ns = period_ns - high_ns with open(OUTPUT_FILE, "w") as f: # 写入VCD头部 f.write("$date\n Generated by Python script\n$end\n") f.write(f"$timescale {TIME_SCALE} $end\n") f.write("$scope module top $end\n") f.write(f"$var wire 1 ! {SIGNAL_NAME} $end\n") f.write("$upscope $end\n") f.write("$enddefinitions $end\n") # 写入初始值 current_time = 0 f.write(f"#{current_time}\n") f.write("0!\n") # 循环写入电平跳变 for _ in range(TOTAL_CYCLES): current_time += high_ns f.write(f"#{current_time}\n") f.write("1!\n") current_time += low_ns f.write(f"#{current_time}\n") f.write("0!\n")
运行后生成的square_wave.vcd即为符合标准的波形文件。
2.2 C实现版本
#include <stdio.h> #include <stdint.h> #define TIME_SCALE "1ns" #define FREQ 1000000 #define DUTY_CYCLE 0.5 #define TOTAL_CYCLES 100 #define OUTPUT_FILE "square_wave.vcd" int main() { uint64_t period_ns = (uint64_t)(1.0 / FREQ * 1e9); uint64_t high_ns = (uint64_t)(period_ns * DUTY_CYCLE); uint64_t low_ns = period_ns - high_ns; FILE *f = fopen(OUTPUT_FILE, "w"); if (!f) { perror("Failed to open file"); return 1; } // 写头部 fprintf(f, "$date\n Generated by C script\n$end\n"); fprintf(f, "$timescale %s $end\n", TIME_SCALE); fprintf(f, "$scope module top $end\n"); fprintf(f, "$var wire 1 ! square_wave $end\n"); fprintf(f, "$upscope $end\n"); fprintf(f, "$enddefinitions $end\n"); uint64_t current_time = 0; fprintf(f, "#%llu\n0!\n", current_time); for (int i = 0; i < TOTAL_CYCLES; i++) { current_time += high_ns; fprintf(f, "#%llu\n1!\n", current_time); current_time += low_ns; fprintf(f, "#%llu\n0!\n", current_time); } fclose(f); return 0; }
编译运行后即可生成相同的VCD文件。
3. 效果验证
生成的VCD文件可使用GTKWave等通用波形查看工具直接打开,显示的方波周期、占空比与配置参数完全一致。
参考截图说明:[GTKWave打开方波VCD效果] 截图左侧信号栏显示top.square_wave信号,右侧波形区域为连续的高低电平交替的恒定频率方波。
内容的提问来源于stack exchange,提问作者ryhn
相关产品推荐
相关产品推荐

