Initial commit
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user