OpenFPGA系列(四) OpenFPGA 架构描述文件和仿真配置文件


OpenFPGA使用两个 XML文件: 架构描述文件和仿真配置文件。这和只使用一个XML文件(架构文件)的VPR8不同。

一、OpenFPGA 架构描述文件

OpenFPGA的示例架构文件保存在OpenFPGA/openfpga_flow/openfpga_arch 目录下
在这里插入图片描述
OpenFPGA的架构文件包含 设备级信息、电路级信息以及对原始VPR架构的注释。
根标签<openfpga_architecture>:所有的其他子标签都包含在此标签下。
在这里插入图片描述

  1. <circuit_library>:包含大量的 circuit_model ,每个模型代表一个 FPGA 基础逻辑单元,如 LUT、MUX。
  2. <technology_library>:包含晶体管级参数,可以指定用于构建 circuit_model 时使用哪些晶体管模型。
  3. <configuration_protocol>:包含了在 FPGA Fabric中使用的配置协议的详细描述。
  4. <connection_block>:包含对原始 VPR XML中所定义的连接块<connection_block>的注释。
  5. <switch_block>:包含对原始 VPR XML中所定义的开关盒<switchlist>的注释。
  6. <routing_segment>:包含对原始 VPR XML中所定义的路由段<segmentlist>的注释。
  7. <direct_connection>:包含对 Tile 间直接连接定义的注释
  8. <directlist>:Tile 间直接互连描述
  9. <pb_type_annotation> :包含对可编程块架构的注释
  10. <complexblocklist>

二、OpenFPGA 仿真配置文件

所在路径为OpenFPGA/openfpga_flow/openfpga_simulation_settings ,此文件包含了 testbench 生成器所需的参数,都在根标签<openfpga_simulation_setting>下定义。
在这里插入图片描述子标签有:

  1. <clock_setting>:定义了仿真中与时钟相关的设置,例如时钟频率和要仿真的时钟周期数。由FPGA-Verilog 和 FPGA-SPICE 共同使用
  2. <simulator_option>:定义了在HDL和SPICE仿真器中可用的通用选项。由 FPGA-SPIC E使用。
  3. <monte_carlo>:定义在蒙特卡罗仿真中使用的关键参数。由 FPGA-SPICE 使用。
  4. <measurement_setting>:定义用于测量信号转换和延迟的参数。由FPGA-SPICE使用。
  5. <stimulus>:定义用于在 testbench 中产生电压激励的参数。由FPGA-SPICE使用的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我无法执行代码,但我可以给你一个例子来帮助你理解顶层文件仿真文件。 顶层文件(Top-Level File)是一个 Verilog 文件,它描述了整个设计电路的结构。它定义了模块之间的连接,包括输入和输出端口以及内部信号。在这个文件中,你会看到实例化各种模块并将它们连接起来。 以下是一个简单的顶层文件的例子: ``` module top( input clk, input [7:0] data_in, output [7:0] data_out ); // 实例化模块 adder add( .a(data_in), .b(8'h01), .sum(data_out) ); endmodule ``` 在这个例子中,我们定义了一个顶层模块 `top`,它有一个时钟输入 `clk`,一个 8 位数据输入 `data_in` 和一个 8 位数据输出 `data_out`。我们还实例化了一个叫做 `adder` 的模块,并将 `data_in` 和常量 `8'h01` 相加,然后将结果输出到 `data_out`。 仿真文件(Testbench File)是用于验证设计是否正确的文件。它包含了测试向量,即输入信号,以及对应的预期输出信号。仿真文件会模拟电路的行为,并将仿真结果与预期结果进行比较,以确保设计的正确性。 以下是一个简单的仿真文件的例子: ``` module testbench(); // 定义信号 reg clk; reg [7:0] data_in; wire [7:0] data_out; // 实例化顶层模块 top dut( .clk(clk), .data_in(data_in), .data_out(data_out) ); // 时钟生成器 always #10 clk = ~clk; // 测试向量和预期结果 initial begin clk = 0; data_in = 8'h01; #10 data_in = 8'h05; #10 data_in = 8'h0a; #10 data_in = 8'h0f; #10 data_in = 8'h14; #10 data_in = 8'h19; #10 data_in = 8'h1e; #10 data_in = 8'h23; #10 data_in = 8'h28; #10 data_in = 8'h2d; #10 data_in = 8'h32; #10 data_in = 8'h37; #10 data_in = 8'h3c; #10 data_in = 8'h41; #10 data_in = 8'h46; #10 data_in = 8'h4b; #10 data_in = 8'h50; #10 data_in = 8'h55; #10 data_in = 8'h5a; #10 data_in = 8'h5f; #10 data_in = 8'h64; #10 data_in = 8'h69; #10 data_in = 8'h6e; #10 data_in = 8'h73; #10 data_in = 8'h78; #10 data_in = 8'h7d; #10 data_in = 8'h82; #10 data_in = 8'h87; #10 data_in = 8'h8c; #10 data_in = 8'h91; #10 data_in = 8'h96; #10 data_in = 8'h9b; #10 data_in = 8'h9f; #10 data_in = 8'ha4; #10 data_in = 8'ha9; #10 data_in = 8'hae; #10 data_in = 8'hb3; #10 data_in = 8'hb8; #10 data_in = 8'hbd; #10 data_in = 8'hc2; #10 data_in = 8'hc7; #10 data_in = 8'hcc; #10 data_in = 8'hd1; #10 data_in = 8'hd6; #10 data_in = 8'hdb; #10 data_in = 8'he0; #10 data_in = 8'he5; #10 data_in = 8'hea; #10 data_in = 8'hef; #10 data_in = 8'hf4; #10 data_in = 8'hf9; #10 data_in = 8'hfe; #10 $finish; end // 打印仿真结果 always @(posedge clk) begin $display("data_in=%h, data_out=%h", data_in, data_out); end endmodule ``` 在这个例子中,我们定义了一个仿真模块 `testbench`,它包含时钟信号 `clk`,输入信号 `data_in` 和输出信号 `data_out`。我们还实例化了顶层模块 `top`。我们使用一个简单的时钟生成器将时钟信号反转,并在 `initial` 块中定义了一系列输入向量和预期输出结果。最后,我们使用 `$display` 函数在每个时钟上升沿时打印当前的输入和输出值。 以上是一个简单的例子,实际的顶层文件仿真文件可能更加复杂。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雪天鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值