Initial commit

This commit is contained in:
Myfro9
2026-05-09 01:12:34 -05:00
commit 61b4731d06
44 changed files with 104560 additions and 0 deletions
@@ -0,0 +1,27 @@
{
"eval_id": 2,
"eval_name": "dff-sync-rst-gui-mode",
"prompt": "我有一个带同步复位的 D触发器模块 dff_sync_rst.v,路径是 D:/fpga/dff_sync_rst.v。请帮我在 Vivado GUI 模式下运行仿真,同时也生成 CSV 文件保存到 D:/sim_results/dff_waves.csv",
"assertions": [
{
"id": "tb_generated",
"text": "生成了 tb_dff_sync_rst.v 文件,包含时钟生成、复位序列和 D 输入激励",
"check": "file_exists:tb_dff_sync_rst.v"
},
{
"id": "gui_tcl_correct",
"text": "run_sim_gui.tcl 中使用 GUI 模式(不含 -mode batch,不含 close_sim 和 exit)",
"check": "file_not_contains:run_sim_gui.tcl:-mode batch"
},
{
"id": "vcd_dump_in_tb",
"text": "testbench 包含 $dumpfile 和 $dumpvars 语句以记录波形",
"check": "file_contains:tb_dff_sync_rst.v:$dumpfile"
},
{
"id": "vcd_to_csv_mentioned",
"text": "提供了 vcd_to_csv.py 脚本或明确说明如何导出 CSV",
"check": "file_exists:vcd_to_csv.py"
}
]
}
@@ -0,0 +1,16 @@
// 带同步复位的 D 触发器
module dff_sync_rst (
input wire clk, // 时钟
input wire rst, // 同步复位(高有效)
input wire d, // 数据输入
output reg q // 数据输出
);
always @(posedge clk) begin
if (rst)
q <= 1'b0;
else
q <= d;
end
endmodule
@@ -0,0 +1,42 @@
# Vivado 仿真 TCL 脚本 - GUI 交互模式(用户可在 Vivado 中直接查看波形)
# 模块: dff_sync_rst(同步复位 D 触发器)
# 注意: 此脚本不包含 close_sim 和 exit,Vivado 将保持打开状态
# 创建工程
create_project -force sim_proj ./sim_proj -part xc7a200tfbg676-2
set_property simulator_language Verilog [current_project]
# 添加源文件(请将路径替换为实际路径)
add_files -norecurse dff_sync_rst.v
add_files -fileset sim_1 -norecurse tb_dff_sync_rst.v
# 更新 IP 编译顺序
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1
# 设置顶层为 testbench
set_property top tb_dff_sync_rst [get_filesets sim_1]
set_property top_lib xil_defaultlib [get_filesets sim_1]
# 仿真设置 - GUI 模式运行足够长时间以便观察
set_property -name {xsim.simulate.runtime} -value {500ns} -objects [get_filesets sim_1]
# 启动仿真(GUI 模式)
launch_simulation
# 运行全部激励
run all
# ---- GUI 模式特有操作 ----
# 以下命令在 GUI 打开后添加所有信号到波形窗口
# add_wave /tb_dff_sync_rst/*
# 用户可在 Vivado 波形窗口中手动缩放/查看
# 注意: 不加 close_sim 和 exit,让 Vivado GUI 保持打开
# 用户可以在 Vivado 界面中:
# 1. 在 Waveform 窗口查看所有信号
# 2. 使用 File > Export > Export Simulation 导出数据
# 3. 手动运行更长时间: run 1000ns
# 同时也生成 VCD 文件,以便后续转换为 CSV
# (testbench 中已包含 $dumpfile/$dumpvars 语句)
@@ -0,0 +1,69 @@
`timescale 1ns/1ps
module tb_dff_sync_rst;
// ---- 参数 ----
parameter CLK_PERIOD = 10; // 100 MHz 时钟,周期 10ns
// ---- 信号声明 ----
reg clk;
reg rst; // 同步复位,高有效
reg d;
wire q;
// ---- 被测模块例化 ----
dff_sync_rst uut (
.clk (clk),
.rst (rst),
.d (d),
.q (q)
);
// ---- 时钟生成 ----
initial clk = 0;
always #(CLK_PERIOD/2) clk = ~clk;
// ---- 复位与激励 ----
initial begin
// 初始化信号
rst = 1;
d = 0;
// 复位保持 5 个时钟周期
repeat(5) @(posedge clk);
rst = 0;
// 施加激励:交替改变 d,每 2 个周期变一次
@(posedge clk); d = 1;
@(posedge clk); d = 0;
@(posedge clk); d = 1;
@(posedge clk); d = 1;
@(posedge clk); d = 0;
// 测试同步复位:在中途再次复位
@(posedge clk); rst = 1; d = 1; // 即使 d=1,复位期间 q 应该为 0
@(posedge clk);
@(posedge clk); rst = 0;
// 复位后继续激励
@(posedge clk); d = 1;
@(posedge clk); d = 0;
@(posedge clk); d = 1;
// 等待几个周期后结束
repeat(5) @(posedge clk);
$finish;
end
// ---- VCD 波形记录 ----
initial begin
$dumpfile("tb_dff_sync_rst.vcd");
$dumpvars(0, tb_dff_sync_rst);
end
// ---- 监控输出(可选,方便在 log 中看到信号变化)----
initial begin
$monitor("time=%0t clk=%b rst=%b d=%b q=%b", $time, clk, rst, d, q);
end
endmodule