基于Vivado的FPGA设计开发的流程主要包括以下步骤:
1)创建工程;
2)创建源设计文件,包括Verilog文本、IP核、模块文件、网表输入等方式;
3)行为仿真(Behavioral Simulation),Vivado自带仿真器,也可以选择第三方仿真软件ModelSim等工具进行仿真;
4)综合(Synthesis):根据设定的编译策略,对工程进行综合,生成网表文件;
5)引脚约束:通过I/O Planing或者直接编辑.XDC文件添加引脚约束信息;
6)实现(Implimentation):指针对某一具体的目标器件经布局布线(Plance&Route),或者适配器(Fitting),产生延时信息文件、报告文件(.rpt),以供时序分析、时序仿真使用;
7)生成Bitstream文件,产生.bit和.bin等编程文件;
8)将生成的Bitstream文件下载至FPGA芯片。
以Ver流水灯设计为例,介绍在Vivado环境下运行Verilog程序的流程,包括源程序的编写、编译、仿真及下载。本例基于Vivado18.3版本。
双击Vivado18.3,出现如图所示的界面,单击Quick Start栏中的Create Project,启动工程向导,创建一个新工程。

工程路径F:/FPGA/VIVADO/FPGA-Project/exam;
工程名称:flow_led

选择项目类型
选择RTL项目,RTL仿真就是程序仿真,RTL用硬件描述语言描述出功能,然后经过逻辑综合,得到门级单元。

添加源文件与选择设计语言,target language与simulator language都选择Verilog语言,单击next。

在器件选择页面中根据自己使用的FPGA开发板进行选择,我这里选择Xilinx的Artix-7开发板,封装形式package选择csg324,单击next;

工程创建成功页面如下所示,核对自己选择的信息,无误后点击finish。

在Flow Navigator下的Project Manager中点击Add Sources,打开设计文件导入窗口;

在Add Sources窗口中选择Add or create design sources选项,表示创建源文件;

点击Create File新建文件;

填写源文件名称为flow_led;

在Sources栏中点击新建的flow_led.v文件,开始进行流水灯源文件的编写;

流水灯设计源代码flow_led.v
module flow_led(clk,clr,led);
input clk;
input clr;
output reg [7:0] led;
reg [28:0] counter;
//时序逻辑
always @(posedge clk)
begin
if(!clr) begin counter <= 0; led <= 8'h01; end
else
if(counter < 50000000)//2Hz
counter <= counter + 1;
else
begin
counter <= 0;
led <= {led[6:0],led[7]};
end
end
endmodule
在Flow Navigator下的Project Manager中点击Add Sources, 在Add Sources窗口中选择Add or create simulation sources选项,表示创建仿真激励文件;

点击Create File新建文件; 填写激励文件名称为tb_led;


在Sources栏中点击新建的tb_led.v文件,开始进行流水灯源文件的编写;

流水灯测试代码激励文件tb_led
`timescale 1ns / 1ns //时间尺度/时间精度
module tb_led( );
parameter DELY = 20;
reg clk;
reg clr;
wire [7:0] led;
flow_led i1(
.clk (clk),
.clr (clr),
.led (led));
initial begin
clk = 1'b0; clr = 1'b0;
#(DELY*2) clr = 1'b1;
end
always
begin
#(DELY/2) clk = ~clk;
end
endmodule
开始进行行为级仿真,在Flow Navigator下的Simulation中点击Run Simulation选择Run Behavioral Simulation;

100ms表示仿真的时间长度。得出如下的仿真图,观察此波形是否和预想的一致,验证原设计问价的正确性。

在Flow Navigator下的Project Manager中点击Add Sources, 在Add Sources窗口中选择Add or create constraints选项,表示创建引脚约束文件;

输入文件名;

创建完成后,双击sources栏中的Constraints下的flow_led.xdc文件,输入引脚约束文件。
XDC 编写的语法:
约束引脚号:set_property PACKAGE_PIN " 引脚编号 " [ get_ports “端口名称”]
约束电压: set_property IOSTANDARD " 电平标准 " [ get_ports “端口名称” ]
重点:
通过原理图,查看LED与FPGA中实际引脚相连位置,然后看驱动该FPGA的Bank是多大的电压,如果是1.5V电压驱动,那就是LVCMOS15 ,如果是1.8V驱动,那就是LVCMOS18
解读:
set_property:设置属性
IOSTANDARD :IO标准
LVCMOS15 :1.5V
get_ports :获取端口
led_tri_o[3]:第3个led端口
PACKAGE_PIN :引脚
F5 :引脚约束到F5
通俗理解:
set_property IOSTANDARD LVCMOS15 [get_ports {led_tri_o[3]}]修改led_tri_o[3]的IO标准为1.5V
set_property PACKAGE_PIN G6 [get_ports {led_tri_o[3]}] 将led_tri_o[3]约束到G6引脚

流水灯引脚约束文件
#//时钟和复位
set_property -dict {PACKAGE_PIN P17 IOSTANDARD LVCMOS33} [get_ports clk]
set_property -dict {PACKAGE_PIN P15 IOSTANDARD LVCMOS33} [get_ports clr]
#//LED0-LED7
set_property -dict {PACKAGE_PIN K1 IOSTANDARD LVCMOS33} [get_ports {led[7]}]
set_property -dict {PACKAGE_PIN H6 IOSTANDARD LVCMOS33} [get_ports {led[6]}]
set_property -dict {PACKAGE_PIN H5 IOSTANDARD LVCMOS33} [get_ports {led[5]}]
set_property -dict {PACKAGE_PIN J5 IOSTANDARD LVCMOS33} [get_ports {led[4]}]
set_property -dict {PACKAGE_PIN K6 IOSTANDARD LVCMOS33} [get_ports {led[3]}]
set_property -dict {PACKAGE_PIN L1 IOSTANDARD LVCMOS33} [get_ports {led[2]}]
set_property -dict {PACKAGE_PIN M1 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
set_property -dict {PACKAGE_PIN K3 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
点击左侧导航栏中的Synthesis下的Run Synthesis进行综合编译,为缩短编译时间,此处选择8;

直接选择的打开综合设计文件;

编译成功后点击导航栏中的Open Synthesis Design下的Schematic,可以查看综合后的电路图。

点击导航栏中的Program and Debug下的Generate Bitstream生成比特流文件;

选择打开硬件管理器;

电脑外接开发板后点击Hradware manager栏中下方的Open target中的Auto Connect,进行开发板的连接。

搜索电脑外接的FPGA开发板,由于我还没有开发板,目前就演示到这里,后面再更新。
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow
我已经使用Apartment设置了一个Rails5应用程序(1.2.0)和Devise(4.2.0)。由于某些DDNS问题,应用只能在app.myapp.com下访问(请注意子域app)。myapp.com重定向到app.myapp.com。我的用例是每个注册该应用的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据。用户不应限定在其子域内。基本上应该可以从任何子域登录。重定向到租户的正确子域由ApplicationController处理。根据Devise标准,登录页面位于app.myapp.com/users/sign_in。这就是问题开始的
我在关注RyanbatesRailsCast的devise和omniauth(第235集-devise-and-omniauth-revised)。当我尝试使用Twitter登录时,标题中不断出现错误。defself.new_with_session(params,session)ifsession["devise.user_attributes"]new(session["devise.user_attributes"],without_protection:true)do|user|user.attributes=paramsuser.valid?end完整跟踪:C:/Ruby20
1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva