044-赛灵思-0FPGA-简单实用

很久没用了,复习一下,新手也可以看下

【1】指令并行执行

【2】不擅长逻辑控制,常和arm一起实用

【3】用简单小例子,先有个大概思路。

        就是要新新建.v  和.xdx约束文件;然后依次综合-----实现-----产生bit文件,给fpga上电,连接好下载线,下载程序。

`timescale 1ns / 1ps

module LED(

    input SW,

    output L

    );

    assign L = SW;

endmodule

约束文件:xdc文件

##Switches
set_property -dict { PACKAGE_PIN G15   IOSTANDARD LVCMOS33 } [get_ports SW]; #IO_L19N_T3_VREF_35 Sch=sw[0]

##LEDs
set_property -dict { PACKAGE_PIN M14   IOSTANDARD LVCMOS33 } [get_ports L]; #IO_L23P_T3_35 Sch=led[0]

说明: 电路图和板子上都可以看到LED的编号,可以重新起一个名字,对应.v文件了的就可以。

044-赛灵思-0FPGA-简单实用_第1张图片

(图) 可以看到图中led 旁边都标有名字,比如我们用到的G15   


 

【4】reg寄存器

reg[3:0] led;

【5】always @()

                 begin

 

                  end

【6】时序逻辑图,时钟

【7】一个小的流水灯程序 ,也可以参考https://blog.csdn.net/leon_zeng0/article/details/82230372 写的很详细,我这里只是为了说明下操作过程。

(1)create project ----fillter-》选择自己开发版型号(比如我的zynq-7000),如果找不到的话,可以去网上下载相关文件,搜一下即可

(2)add source -----

044-赛灵思-0FPGA-简单实用_第2张图片

代码:led_top.v如下:

module led_top(
    input CLK_i,
input RSTn_i,
output reg [3:0]LED_o
);
reg [31:0]C0;
always @(posedge CLK_i)
if(!RSTn_i)
begin
LED_o <= 4'b1;
C0 <= 32'h0;
end
else
begin
if(C0 == 32'd50_000_000)
begin
C0 <= 32'h0;
if(LED_o == 4'b1000)
LED_o <= 4'b1;
else LED_o <= LED_o << 1;
end
else
begin
C0 <= C0 + 1'b1;
LED_o <= LED_o;
end
end
endmodule
 

(3)添加约束

044-赛灵思-0FPGA-简单实用_第3张图片

(4) 综合-----实现-----产生bit文件

(5)给fpga上电,连接好下载线。

(6)下载程序

你可能感兴趣的:(006-硬件部分)