Vivado寄存器初始值问题

摘要:
前言此重置仅适用于Vivado中的寄存器重置。复位寄存器需要复位,这使寄存器返回其初始值。某些寄存器不需要重置。如果复位语句中只有初始值,则寄存器是通电配置和复位后的初始值。代码验证:1.以下代码不会重置或分配初始值。Vivado合成后,寄存器的初始值均为0.reg[5:0]r_cnt_1;always@beginr_cnt_1˂=r_cnt_1+6'd1;结束//always2。以下代码不会重置并分配初始值。在Vivado合成之后,寄存器的初始值是代码中分配的初始值。在属性窗口中查看初始值,如下所示,您可以更改右侧的初始值(未使用)。。

前言

本复位只针对Vivado中的寄存器复位。

什么时候需要复位?到底要不要复位?怎么复位?复位有什么卵用?

该复位的寄存器需要复位,复位使得寄存器恢复初始值,有的寄存器并不需要复位(数据流路径上)。

官方说法如下:具体可查看ug949。

Vivado寄存器初始值问题第1张

流程

所以,问题来了,为了不使用复位信号该怎么赋初始值。

注意:reg语句中给寄存器赋初始值,在FPGA上电配置后值就为这个初始值。

           如果只有复位语句中的初始值,那么上电配置(configuration )后和复位(reset)后寄存器都为此初始值。

           如果reg语句给了初始值x1,且在复位语句中赋初始值x2,那么上电配置后初始值为x1,复位后寄存器初始值为x2。

Vivado寄存器初始值问题第2张

代码验证:

1.如下代码,不复位也不赋初始值,vivado综合后寄存器初始值全为0。

(*DONT_TOUCH="yes"*)reg [5:0] r_cnt_1;
always @(posedge i_clk)
begin
    r_cnt_1 <= r_cnt_1 + 6'd1;
end //always

2.如下代码,不复位赋初始值,vivado综合后寄存器初始值为代码中赋的初始值。

(*DONT_TOUCH="yes"*)reg [5:0] r_cnt_1 = 6'h34;
always @(posedge i_clk)
begin
    r_cnt_1 <= r_cnt_1 + 6'd1;
end //always

3.如下代码,使用复位但不给初始值,vivado综合后寄存器初始值为代码中复位语句中赋的初始值。(Xilinx不推荐异步复位)

(*DONT_TOUCH="yes"*)reg [5:0] r_cnt_0;
always @(posedge i_clk,negedge i_rst_n)
begin
    if (~i_rst_n)
        r_cnt_0 <= 6'h12;
    else
        r_cnt_0 <= r_cnt_0 + 6'd1;
end //always

4.如下代码,既使用复位且给初始值,vivado综合后寄存器初始值为reg赋的初始值。

(*DONT_TOUCH="yes"*)reg [5:0] r_cnt_2 = 6'h01;
always @(posedge i_clk,negedge i_rst_n)
begin
    if (~i_rst_n)
        r_cnt_2 <= 6'h12;
    else
        r_cnt_2 <= r_cnt_2 + 6'd1;
end //always

另一个问题,vivado综合寄存器初始值怎么查看?

(1)打开综合后的工程。

Vivado寄存器初始值问题第3张

(2)在网表中查看,不过只能单个点击查看。。。。

Vivado寄存器初始值问题第4张

(3)在properties窗口中查看初始值如下,右侧可以更改初始值(没使用过。。)

Vivado寄存器初始值问题第5张

以上。

免责声明:文章转载自《Vivado寄存器初始值问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇px和rem换算Bootstrap开发漂亮的前端界面之实现原理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)

vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3) Might be a different reason, but this problem is apparently caused when the PATH variabl...

vivado/FPGA 使用小纪

1、使用FPGA做为外部控制器的总线译码时,将总线时钟接在全局时钟脚上(MRCC),就算接在了局部时钟(SRCC)上,也要通过BUFG转为全局时钟走线,否则会因为local clk到各部分的时延较大引起各种问题(时序不稳、观测信号无法正常加载等,血泪教训!) 2、VIO使用时要注意IO及信号走向要在同一时钟域,一个VIO的信号跨时钟域会带来不可预知的问题(...

第一章 MIZ701 VIVADO 搭建SOC最小系统HelloWorld

本章内容是MIZ701中的第五章,本来也是要过渡一下FPGA部分的,但是由于MIZ701没有单独提供PL部分的晶振时钟,时钟必须通过PS产生,所以本章内容作为Miz701的第一章内容。本章的目的是搭建一个最小的SOC系统,并且测试串口输出,千兆以太网回路测试。本章先让PS部分搭建最小系统,这样可以从PS部分获取到时钟,然后为后面章节中PL部分提供时钟源。...