Vivado的40G/50G的时钟code修改配置

在vivado的软件中,需要配置生成GT的IP,调用40g/50g ethernet subsystem 子系统

但是在画板的过程中,时钟资源有限,并不是每个bank都输入时钟,如果实例化2个40g/50G的IP,这两个实例化的IP 选择不同的bank,比如选择bank226和bank227,但是时钟输入只在bank226上,此时bank227的GT IP的时钟来源于bank226,此时需要对IP的时钟输入进行配置,在代码code中进行配置

  1. bank的地理位置

其中GTY的配置,根据上北下南来区分

  1. 确认需要配置的时钟pin

时钟输入的pin,如果采用上面bank的时钟,那么就配置gtnortrefclk

如果采用下面的bank的时钟输入,那么就配置gtsouthrefclk

  1. 根据需要的值进行配置

此处我们一般选择qpll0refclksel,举例说明,实例化了2个GT的IP,分别占用了bank227和bank226,bank226上面有时钟输入,那么需要修改bank227上面的时钟输入配置,因为采用下面bank的时钟,所有输入时钟改为gtsouthrefclk00_in

并且qpll0refclksel_in的选择为3‘b101,

下面的代码文件为xxx_erthernet_gt.v

以下是一个简单的双口RAM读写实例,具有32位宽度和2048深度。该实例使用Vivado进行仿真。 首先,创建一个新的Vivado项目并打开Block Design视图。在设计中添加一个双口RAM IP。 接下来,配置IP以满足要求。在“Ports”标签页中,将读写端口的宽度设置为32位,并将深度设置为2048。 在“Memory”标签页中,选择“Simple Dual Port”作为RAM类型,并将读写时钟设置为相同的时钟。 在“Addresses and Initialization”标签页中,不需要进行任何更改。 在“General”标签页中,将IP的名称更改为“dual_port_ram”。 完成IP配置后,单击“Run Connection Automation”以自动连接IP。 现在,将新的IP添加到设计中并连接必要的信号。在本例中,我们需要连接读写端口的地址、数据和时钟信号。还需要添加一个使RAM在写入操作期间使能的信号。 在示例中,我们将使用两个32位的寄存器来模拟RAM。在时钟上升沿时,将写入RAM,然后在下一个时钟上升沿时从RAM读取值。这将重复2048次。 以下是完整的设计示例: ``` // Verilog code for dual port RAM simulation module dual_port_ram_sim; // Input and output ports reg [31:0] addr_r, addr_w, data_w; wire [31:0] data_r; reg clk; // Dual port RAM instance dual_port_ram #(.ADDR_WIDTH(11), .DATA_WIDTH(32)) ram_inst( .clk(clk), .wea(1), .ena(1), .addra(addr_w), .dina(data_w), .addrb(addr_r), .doutb(data_r) ); // Counter for address generation reg [10:0] count; // Clock generator always #5 clk = ~clk; // Address and data generation always @(posedge clk) begin addr_w <= count; data_w <= count + 1; count <= count + 1; end // Read and write simulation initial begin // Reset clk <= 0; count <= 0; addr_w <= 0; data_w <= 0; // Wait for stable signals #10; // Read and write 2048 times repeat (2048) begin // Write #5; clk <= 1; #5; clk <= 0; // Read #5; clk <= 1; #5; clk <= 0; // Verify read data if (data_r !== count + 1) begin $display("Error: Mismatch at address %d", addr_r); $finish; end end // Done $display("Simulation complete."); $finish; end endmodule ``` 在本例中,我们使用了一个计数器来生成地址和数据,并在时钟上升沿时写入RAM。然后,在下一个时钟上升沿时,我们从RAM读取数据并验证它是否正确。 请注意,此示例仅用于演示目的,并且可能需要根据您的具体要求进行修改
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值