vivado简单小例子

   使用vivado2018.3 来编写一个简单的程序,演示从建文件夹到添加.v文件、约束文件以及仿真文件整个过程,解决可能遇到的问题。

打开软件2018.3

点击creat Project>next


 

1)输入文件名flowing_led(针对自己的代码功能)

2)选择存储的位置

3)勾选"创建子项目"(creat project subdirectory),点击next 


 选择第一项,勾选“不立刻添加具体资源”(do not specify sources at this time),点击next 


根据自己的开发板器件手册修改上述内容。点击next 


 

 对着内容,若正确 点击finsh


 新建.v文件

design sources>add sources


选择第二项,点击NEXT


 

 按顺序进行1-5步(2.选择语言、3.文件名)


 

 定义I/o口,注意写清楚输入输出;

若为总线形式(如图示led)并正确定义MSB、LSB(高位、低位)

点击OK


 

书写代码:

module led(
    input rst,
    input clk,
    output [3:0] led
    );
    
  reg [23:0] cnt_reg;
  reg [3:0]  light_reg;
 //计数器 
  always@(posedge clk)
  begin
        if(rst)
            cnt_reg<=0;
        else
            cnt_reg<=cnt_reg+1;
  end  
  always@(posedge clk)
  begin
        if(rst)
            light_reg<=4'b0001;
        else if(cnt_reg>0)
            begin
                if( light_reg==4'b1000)
                   light_reg<=4'b0001;
                 else
                    light_reg<= light_reg<<1;//计数器记数一次灯左移一位,移至最左且遇到计数器计数则复位状态,重复
            end
          
  end  
  assign led=light_reg;
endmodule

 


 

添加约束条件 右击constraints>add sources


选择第一项>next


 按顺序1—5步


 

 输入约束代码:

set_property PACKAGE_PIN D18 [get_ports {led[3]}]
set_property PACKAGE_PIN G14 [get_ports {led[2]}]
set_property PACKAGE_PIN M17 [get_ports {led[1]}]
set_property PACKAGE_PIN M16 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN L16 [get_ports clk]
set_property PACKAGE_PIN G16 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst]

 


 

添加仿真文件:

simulation sources>add sources>add or creat a simulation sources

 

  按顺序1—5步


 

 点击OK


 

书写仿真代码:


module led_sim(

    );
  
    reg cnt_reg;
    reg clk,rst;
    wire [3:0] led;
    led u1( rst,clk,led);
    //产生时钟 50ns翻转一次,T=100ns
    initial begin
     clk=1;
     forever #50 clk=~clk;
    end
    
     initial begin
     rst=1;
     #500 rst=0; 
     #500 rst=1;
      rst=0;
     end

endmodule

 点击run synthesis

 点击run simulation

 

 

 

 

 

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单Vivado仿真双口RAM的例子: ```verilog module dual_port_ram( input [7:0] addr_a, input [7:0] addr_b, input [7:0] data_a, input [7:0] data_b, input write_en_a, input write_en_b, input clk, output reg [7:0] q_a, output reg [7:0] q_b ); reg [7:0] mem [0:255]; always @(posedge clk) begin if (write_en_a) begin mem[addr_a] <= data_a; end if (write_en_b) begin mem[addr_b] <= data_b; end q_a <= mem[addr_a]; q_b <= mem[addr_b]; end endmodule ``` 在这个例子中,我们定义了一个双口RAM,有两个读写端口。每个端口都有一个地址输入、一个数据输入和一个写使能输入。时钟信号用于同步读写操作。输出是两个数据输出端口,每个端口都有一个数据输出。 在always块中,我们根据写使能信号将数据写入内存中,然后根据读地址从内存中读取数据并将其输出到输出端口。 你可以使用Vivado仿真工具来测试这个模块。首先需要创建一个仿真测试台,然后设置输入信号并运行仿真。例如,下面是一个测试台,将一些数据写入内存中,然后从内存中读取相同的数据: ```verilog module dual_port_ram_tb; reg [7:0] addr_a; reg [7:0] addr_b; reg [7:0] data_a; reg [7:0] data_b; reg write_en_a; reg write_en_b; reg clk; wire [7:0] q_a; wire [7:0] q_b; dual_port_ram dut( .addr_a(addr_a), .addr_b(addr_b), .data_a(data_a), .data_b(data_b), .write_en_a(write_en_a), .write_en_b(write_en_b), .clk(clk), .q_a(q_a), .q_b(q_b) ); initial begin clk = 0; forever #5 clk = ~clk; end initial begin addr_a = 0; addr_b = 0; data_a = 8'hAA; data_b = 8'h55; write_en_a = 1; write_en_b = 1; #10; write_en_a = 0; write_en_b = 0; addr_a = 1; addr_b = 1; data_a = 8'h55; data_b = 8'hAA; write_en_a = 1; write_en_b = 1; #10; write_en_a = 0; write_en_b = 0; $finish; end endmodule ``` 在这个测试台中,我们使用了一个时钟生成器,以5个时间单位为周期来反转时钟信号。我们设置了一些输入信号,将数据写入内存中,然后等待一段时间。然后我们又将另一组数据写入内存中,并等待一段时间。最后,我们调用$finish命令来结束仿真。 你可以运行仿真,查看输出结果,验证双口RAM的正确性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值