vivado应用-8位流水灯(开发板xc7a35t)

首先,创建新项目,在项目内建立流水灯源文件,编写代码如下(代码功能已经标注)

module source_WallterfallLight(clk,reset,led);
    input clk;
    input reset;
    output led;
    
    reg [7:0] led;
    reg [31:0] counter;
    reg [1:0] state;  // 表示计数是否计满
    
    // 计数器程序
    always @(posedge clk or negedge reset)
        begin
            if (!reset)
                begin
                counter <= 32'd0;  // 复位端下降沿到来,计数器清零
                end
            else if (counter == 32'd100_000_000) 
                begin
                counter <= 32'd0;  // 计数器满100M清零
                end
            else
                begin
                counter <= counter + 32'd1;
                end
        end
    
    // 状态量程序
    always @(posedge clk or negedge reset)
        begin
            if (!reset)
                begin
                state <= 2'b00;  // 2'b00表示清零状态
                end
            else if (counter == 32'd0)
                begin
                state <= 2'b11; // 2'b11表示开始计数状态
                end
            else
                begin
                state <= 2'b01;  // 2'b01表示计数中状态
                end
        end
    
    // led程序   
    always @(posedge clk or negedge reset)
        begin
            if (!reset)
                begin
                led <= 8'b0;  // 复位端下降沿到来,led全灭
                end
            else if (state == 2'b11)  // 当state处于开始计时状态,led进行变化
                begin
                    if (led == 8'b0)
                        begin
                        led <= 8'b0000_0001;  // 上一步清零,则led为8'b0000_0001
                        end
                    else if (led == 8'b1000_0000)
                        begin
                        led <= 8'b0000_0001;  // 上一步led == 8'b1000_0000,则led为8'b0000_0001
                        end
                    else
                        begin
                        led <= led << 1'b1;  // 正常led执行左移一位操作
                        end
                end
        end

endmodule

编辑仿真文件,因为开发板提供的时钟频率100MHz,时钟周期为10ns,而我选择的流水灯周期为1s,需要计数器counter计数100_000_000次输出led才能变化一次,尝试在仿真中定义周期为10ns的时钟信号,并与流水灯module的clk端相连,reset置0,led为wire型信号,选择仿真周期为16s,仿真极其缓慢,大概5min仅能到微妙量级。

这里为提高仿真效率,可以在源文件中修改计数器最大值为1000_000,那么需要的时钟周期可以增大100倍即1000ns,这样需要仿真的次数变少了,16s仿真大概20min可以跑完,会有两个完整的流水灯输出图像。

编辑引脚约束,这里有两点需要注意:

一是各管脚clk、reset、led都是寄存器型信号(reg),需要{}

set_property PACKAGE_PIN R1 [get_ports {reset}]
set_property IOSTANDARD LVCMOS33 [get_ports {reset}]

二是时钟信号,需要按开发板上端口填写时钟信号,我这里板上标明了100MHz(P17)

## reset
set_property PACKAGE_PIN R1 [get_ports {reset}]
set_property IOSTANDARD LVCMOS33 [get_ports {reset}]

## clk

set_property PACKAGE_PIN P17 [get_ports {clk}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk}]

## LED
set_property PACKAGE_PIN K3 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN M1 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property PACKAGE_PIN L1 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property PACKAGE_PIN K6 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property PACKAGE_PIN J5 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property PACKAGE_PIN H5 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property PACKAGE_PIN H6 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property PACKAGE_PIN K1 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]

本文主要用来记录个人学习verilog中曾遇到的问题,觉得本文有价值请自用。

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vivado中添加xc7a35t器件,可以按照以下步骤进行操作: 1. 打开Vivado并创建一个新的工程。 2. 在“创建工程”对话框中,选择xc7a35tfgg484-2芯片型号作为目标芯片。 3. 创建工程文件并完成创建。 4. 在工程文件中添加代码。 5. 检查代码的语法问题。 6. 点击界面上的“Add Sources”按钮,进入添加源文件的界面。 7. 在添加源文件界面,选择“Create File”按钮,以创建一个新的文件。 8. 在“Family”栏中选择“Artix-7”,在“Speed grade”栏中选择“-2”,在“Package”栏中选择“fgg484”。 9. 在下面的列表中选择“xc7a35tfgg484-2”。 10. 点击“Next”按钮,继续完成其他配置步骤。 通过以上步骤,您可以成功地在Vivado中添加xc7a35t器件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [0.1.1 vivado创建工程](https://blog.csdn.net/chen1658137632/article/details/118093410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ARTIX-7 XC7A35T实验项目之流水灯](https://blog.csdn.net/weixin_51028584/article/details/127231495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值