链接: Verilog刷题
通过LED流水灯实验,熟悉vivado软件开发FPGA的基本流程。包括器件选择、设置、代码的编写、编译、分配管脚、下载、程序FLASH固化烧录等。
vivado 2019.1
黑金AX7035开发板


从原理图可以看出,FPGA的IO输出低电平点亮LED,输出高电平LED熄灭。
FPGA的设计中通常使用计数器来计时,对于50MHZ的系统时钟,一个时钟周期是20ns,那么表示1秒需要50_000_000个时钟周期。
1,打开vivado,在IDE里双击Create Project,如下图:

2,弹出一个vivado的工程向导,点击Next;
3,在弹出的对话框中输入工程名和工程存放的目录,工程可以选择自定义一个文件夹存放,这里取一个led_test的工程名,点击Next;

4,在下面的对话框中默认选择RTL Project,因为这里使用Verilog行为描述语言来编程。下面的Do not specify source at this time 的勾也可以打上。如果不打上,下一步会进入添加source file界面;

5,进入添加source file 界面,这里先不添加任何设计文件,点击Next;
6,提示是否添加已有的约束文件,这里约束文件也没有设计,所以不添加;
7,选择所用的FPGA器件,以及进行配置。首先在Family栏里选择Artix - 7,Speed grade栏选择-2,在Package栏选择fgg484,然后在下面列表中选择xc7a35tfgg484-2,单击Next;

8,再次确认板子型号是否正确,没有问题点击Finish完成工程创建。
1,点击Project Manager下的Add Sources图标;

2,选择Add or create design sources,点击Next;

3,点击Add Files可以添加源文件,点击AddDirectories可以按目录添加源文件,因为还没设计程序,所以点击Create File按钮;

在弹出的对话框里选择File type是Verilog,File name是led_test,点击OK,点击Finish;

4,向导会提示定义I/O端口,可以在后面编写,单击OK,单击Yes。这时在Project Mannager界面下的Design Sources已经有了一个led_test.v文件,并自动成为项目的top模块;

5,编写代码,control+s保存好代码;
`timescale 1ns / 1ps
module LED_test
(
input sys_clk, //system clock 50MHZ on board
input rst_n, //reset low active
output [3:0] led //LED use of control the LED signal on board
);
reg [31:0] timer;
reg [3:0] led;
//==============================
/cle counter : from 0 to 4 sec
//==============================
always @(posedge sys_clk or posedge rst_n)
begin
if(~rst_n)
timer <= 32'd0; //when the reset signal valid,time counter clearing
else if(timer == 32'd199_999_999) //4 seconds count(50M * 4 - 1 = 199_999_999)
timer <= 32'd0; //count done,clearing the time counter
else
timer <= timer + 1'b1; //timer counter = timer counter + 1
end
//==============================
//LED control
//==============================
always @(posedge sys_clk or posedge rst_n)
begin
if(~rst_n)
led <= 4'b1111;
else if(timer == 32'd49_999_999)
led <= 4'b0111;
else if(timer == 32'd99_999_999)
led <= 4'b1011;
else if(timer == 32'd149_999_999)
led <= 4'b1101;
else if(timer == 32'd199_999_999)
led <= 4'b1110;
end
ila ila_inst
(
.clk(sys_clk),
.probe0(timer),
.probe1(led)
);
endmodule
1,点击RTL Analysis下的Open Elaboratred Design图标;

2,在I/O Ports添加I/O口和时钟、复位口的引脚,如果在栏目找不到,到菜单栏单击Window,选择I/O Ports。将原理图的I/O写入,复位引脚在这里默认低电平复位,将I/O口用一个按键替代即可;

3,control+s保存,在弹出的向导里File type 默认是XDC,Project name自定义,在这里是led,单击OK;

1,点击Synthesis下的Open Synthesized Design图标,选择Constranits Wizard,点击Next;

2,在Frequency栏下输入50,点击Skip to Finish,点击Finish;

3,打开xdc文件,会出现约束语句。

可以用vivado自带的仿真工具来验证流水灯程序的结果
1,设置vivado的仿真配置,右击SIMULATION 中的Simulation Settings;

2,设置成需要的仿真时间,这里设置成50ms,单击OK;

3,添加激励测试文件,点击Project Manager下的Add Sources图标;
4,选择Add or create simulation sources,点击Next;

5,点击Create File生成仿真激励文件;

在弹出的对话框中输入激励文件的名字,这里为vtf_led_test,点击Finish,点击OK,点击Yes;

6,编写仿真程序,control+s保存好代码;
`timescale 1ns / 1ps
module vtf_LED_test;
reg sys_clk;
reg rst_n;
wire [3:0] led;
LED_test uut
(
.sys_clk(sys_clk),
.rst_n(rst_n),
.led(led)
);
initial begin
sys_clk = 0;
rst_n = 0;
#1000;
rst_n = 1;
#20000;
end
always #10 sys_clk = ~sys_clk;
endmodule
7,点击Run Simulation,再选择Run Behavioral Simulation,这里做一下行为级的仿真;

8,在弹出的仿真界面中可以选择双击uut,将timer拖动到Wave中观测timer的波形;


9,点击图标Restart复位一下,再点击Run All,可以看到仿真波形与设计相符;

经过前面的编译和仿真,我们可以把bit文件下载到FPGA芯片中,看一下实际运行效果,下载程序之前先连接硬件,JTAG和开发板连接,开发板连接电源上电。

1,右击PROGRAM AND DEBUG ,单击Bitstream Setting;

2,选择生成bin文件,点击OK,生成的bin文件在后面固化程序到Flash中会用到;

3,单击Generate Bitstream生成bit和bin文件;

4,点击Open Hardware Manager,点击Open Target->Auto Councet,在hardware界面下会显示xc7a35t_0图标,说明JTAG连接成功;

5,右键xc7a35t_0,选择Program Device,选择led_test生成的bit文件,点击Program烧写FPGA【掉电程序丢失】

6,右键xc7a35t_0,选择Add Configruation Memory Device,在弹出的对话框选择正确的FLASH型号,点击OK【掉电程序不丢失】;


7,提示是否对SPI FLASH进行编程,点击OK,在弹出的窗口中,Configration file选择vivado生成的bin文件【文件默认在imp1_1目录下】,点击OK;

8,想加快上电后程序启动,可以在xdc文件添加以下几行代码,目的是为了提高SPI FLASH的读写时钟,其中前面两条设置QSPI FLASH的数据宽度和配置模式,后面一条是配置速度,这个值越大,速度越快。修改好的xdc文件需要重新编译,再次重新生成bit和bin文件。
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
如果这个问题已经得到回答,我提前道歉。我一直在尝试在Google和StackOverflow上搜索此内容,但由于我的搜索查询中包含标点符号,因此搜索引擎往往会对其进行修改并给出无意义的结果。在我的rails应用程序(rails3.2.11,ruby1.9.3)中,我的日志经常是这样的:StartedGET"/apply/contact"for127.0.0.1at2013-01-2917:35:21-0600ProcessingbyJobApplicationsController#showasHTMLParameters:{"id"=>"contact"}[1m[36mJobAppl
使用chrome运行我的Angular应用程序场景场景运行成功,但在firefox新版本35.0b6时发生停止。任何人都请帮助我提前谢谢。我使用的是Protractor1.4.0。我的场景:describe('99ccse2etesting',function(){it('checkithaveatitle99CCS',function(){browser.get('http://99ccs.com/ccsnew/#/login');//itchecksthe"http://99ccs.com/ccsnew/"pagecontainsatitle"99CCS"expect(browse
一、中断系统中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请
我正在开发一个基于XUL的Firefox扩展。我正在尝试使用BLOB创建一个内联WebWorker。该代码曾在Firefox33中运行,但在更新到Firefox35后出现错误。这是一个代码示例:try{varblob=newBlob(["functionf(){}"],{type:"application/javascript"});varurl=window.URL.createObjectURL(blob);//blob:null/371e34bd-1fbf-4f66-89cc-24d0c1c7bad5returnnewWorker(url);}catch(e){console.e
一、首先在华为云物联网平台上的创建产品与设备模型定义、插件开发这就不赘述了 注:我尝试用了不加密的方式,但是无法连接;选择加密的注册方式,可以连接注:NBIOT的密钥(PSK)仅支持32个16进制数(0-f), 例如:a22aaa699997ff90fbc1ac89aab94a99二、通过AT指令使NBIOT连接上华为云1.设备初始化:1AT2AT+CFUN=03AT+QSETPSK=, 注:pskid填0,psk即上面自己写的密钥4AT+NCDP=, 注:ip获取方法,端口号填5684 5AT+QSECSWT=12.开始连接iot平台:1AT+CF
一直以来,互联网界都有着“程序员是吃青春饭”的说法,这一年龄危机甚至逐渐演变为“45岁退休,35岁换人”的段子。并且在“华为大力清洗34岁+的老员工”这则新闻出来后这个话题更加的被愈演愈烈。近日,华为在官网上发布了有关员工年龄层的相关数据,30岁以下员工仅占28%。这个数据自然引发网友的质疑,相关评论迅速占据热评榜首。35岁到底是不是程序员职业寿命的上限?这个问题再度被热议。为什么都认为程序员是吃青春饭?大家都知道中国IT行业起步于九十年代,有经验的老程序员因为业务的需要,很多已经转岗了。而市场上的程序员人才以初级、中级居多,这导致了目前公司里40+的程序员寥寥无几。国内互联网公司996模式,
总览: importorg.apache.flink.streaming.api.scala._importorg.apache.flink.streaming.api.scala.StreamExecutionEnvironmentimportorg.apache.flink.table.api.EnvironmentSettingsimportorg.apache.flink.table.api.bridge.scala.{StreamTableEnvironment,tableConversions}objectsqlQueryTable{ defmain(args:Array[St
LED灯程序设计前言一、LED灯的程序设计1——频闪灯二、LED灯的程序设计2——流水灯三、LED灯的程序设计3——呼吸灯总结参考文献前言本文主要介绍三种LED灯的程序设计,即频闪灯、流水灯和呼吸灯。本文使用的MCU芯片为ESP8266EX,程序编写使用ArduinoIDE的版本号为Arduino1.8.19。一、LED灯的程序设计1——频闪灯数字信号数字信号是以0、1表示的电平不连续变化的信号,也就是以二进制的形式表示的信号。在Arduino中数字信号通过高低电平来表示,高电平则为数字信号1,低电平则为数字信号0。使用输入或输出功能前,需要通过pinMode()函数配置引脚的模式为输入模式或
我想在Windows10中使用Tensorflow(仅支持CPU)。我尝试了以下命令来使用pip安装但没有成功。知道如何解决这个问题吗?C:/Python35/Scripts/pipinstall--upgradetensorflow在CommanPrompt中运行它,我收到以下错误:CollectingtensorflowCouldnotfindaversionthatsatisfiestherequirementtensorflow(fromversions:)Nomatchingdistributionfoundfortensorflow我也尝试过使用pip3或URL安装:C:\
前言时光飞逝,转眼间从事软件测试已经是第7个年头了。从最开始的毛头小子到现在的独当一面经历了太多,也学习了太多知识,所幸最后结果是好的,目前在上海工作从事测试开发岗位,年薪35W+,曾就职于美团测试开发框架组,搭建过美团platuo测试框架,thrift测试框架,自动化测试平台,熟悉python3,java,vue,在多家公司从0到1搭建过自动化测试框架,保障过亿级流量服务的质量工作。今天就分享分享我的心得和我的学习路线以及我整理的学习资源选择测试的原因 我大学学的是计算机专业,对于IT互联网行业,那也算是正统科班出身吧,大四那年就进了一家还挺大的软件公司实习,开发公司的自主产品,一个线上管