1、打开软件
左边点击Quick Start - Creat Project 创造一个新项目
右边是最近的项目
文件名,位置,是否创建子目录
项目类型,我们用RTL 项目
芯片选择,我们用这个 (之后可以在setting里改)
2、代码
一般我们要写三种代码:
- 设计代码
- 测试代码
- 引脚约束代码
Add Sources
分别是:约束,设计,仿真
我们先写个设计
添加文件夹,添加子目录,创建文件夹
如果有代码可以直接添加。这里,我们没有,所以创建一个
我们这里做一个4位二进制-BCD码转换器
定义模块,名字,引脚
我们定义b[3:0]输入,p[4:0]输出
然后,就可以在Sources里看到我们刚创建的文件,点开
他会自动帮你写一部分
然后,我们再随便写一下补充,这里我们用assign语句,把输出的表达式写上即可。
(输出表达式用真值表写,抄一下即可,都不用化简)
下面,RTL分析,点击Schemtic
额,看来他没有自动化简功能,我们在勉为其难的化简一下吧。
这里显示我们有90个单元,9个IO口,94个节点。
我们用卡诺图进行化简
保存时,会弹出这个警告,我们reload 就欧克了
重新RTL分析,简单了很多
下面我们开始写测试代码
这里他自动把模块的源代码放在了一个文件夹里,方便调用
测试代码 感觉组合电路都可以这样测试,遍历下每种情况
`timescale 1ns / 1ps
module bin_to_bcd4_test;
reg b3,b2,b1,b0;
wire p4,p3,p2,p1,p0;
bin_to_bcd4(b3,b2,b1,b0,p4,p3,p2,p1,p0);
initial //产生置/复位信号的激励
begin
b3=0;b2=0;b1=0;b0=0; //赋初值
end
always #10 {b3,b2,b1,b0} = {b3,b2,b1,b0} + 1; //每次加一,#10 表示每十个单位时间
endmodule
测试
在所有代码没错的情况下,你就可以看到信号仿真。
(果然80%的时间都在debug,/(ㄒoㄒ)/~~)
在这里我犯了两个错
- 或,应该用 ” | “,而不是 ” + “
- 调用模块应该时,应该命名模块 bin_to_bcd4 uut(b3,b2,b1,b0,p4,p3,p2,p1,p0);
接下来我们来写约束代码
引脚设置如下
##Switches
set_property PACKAGE_PIN Rl [get_ports {b0}] b0->R1
set_property IOSTANDARD LVCMOS33 [get_ports {b0}]
set_property PACKAGE_PIN N4 [get_ports {b1}] b1->N4
set_property IOSTANDARD LVCMOS33 [get_ports (b1}]
set_property PACKAGE_PIN M4 [get_ports {b2}] b2->M4
set_property IOSTANDARD LVCMOS33 [get_ports {b2}]
set_property PACKAGE_PIN R2 [get _ports {b3}] b->R2
set_property IOSTANDARD LVCMOS33 [get_ports {b3}]
##led
set_property PACKAGE_PIN K2 [get_ports {p0}] p0->K2
set_property PACKAGE_PIN J2 [get_ports {p1}] p1->J2
set_property PACKAGE_PIN J3 [get_ports {p2}] p2->J3
set_property PACKAGE_PIN H4 [get_ports {p3}] p3->H4
set_property PACKAGE_PIN J4 [get_ports {p4}] p4->J4
set_property IOSTANDARD LVCMOS33 [get_ports {p0}]
set_property IOSTANDARD LVCMOS33 [get_ports {p1}]
set_property IOSTANDARD LVCMOS33 [get_ports [p2}]
set_property IOSTANDARD LVCMOS33 [get_ports {p3}]
set_property IOSTANDARD LVCMOS33 [get_ports {p4}]
如果不会,可以看这
3、烧入程序
待续。。。
4、调字体大小
我竟然看着12的字体看了一晚上,眼睛快没了,大家要爱护眼睛 /(ㄒoㄒ)/~~