组合逻辑38译码器实现与相关语法基础
3-8译码器的结构
真值表如下:
显然就是用三个二进制表示8个要选择的电平。
译码器的代码编写
我们译码器的的代码和解释如下:
1 | module decoder_3_8(a, b, c, out); |
synthesis语法测试
然后我们在左侧点击运行测试。
这是用来检查语法是否有错误的。出现弹框会让我们选cpu的个数,默认即可!等待一段时间,即可跑完,之后我们可以点击查看报告来确认是否正确。
然后还可以从message里面查看是否有语法错误。
仿真测试
仿真测试我们在数字电路中学习过,其实就是加入一个示波器,并且给定不同状态的输入信号,output连接示波器,在输入变化期间,观察示波器的显示,确认电路逻辑无误。
先点击添加源文件,创建一个仿真源文件
然后点击create_file
创建文件。
然后输入我们给仿真文件的名字,就可以和我们工程的名字相同,这里统一用decoder_3_8
来命名。
当然我在后面加上了testbench
因为testbench是仿真文件的标识符。然后完成创建,开始编辑testbench
文件。
代码如下:
1 |
|
我们可以先再运行一下synthesis
来检查一下语法问题,当然这里我就跳过了,不建议大家都跳过,如果是刚开始学没多久的话。
点击上面栏里的求和
符号可以查看simulation
和synthesis
状态。
可以看到没有错误,然后运行仿真。
我们先运行behavior
仿真,也就是理想仿真情况,不存在门电路延迟现象。结果如图所示:
软件默认只能跑1000ns,但是我们程序总共要跑1600ns,所以可以让他跑完。
点击这里的播放键,就可以跑完了。
然后放大可以看到全图。我这里点击了图中栏上的四个箭头扩张键,就可以放大时间轴了。
引脚分配
然后我们开始硬件的引脚分配
点击下面的open synthesized design
然后看到弹出的device画面,再点击layout
中的io planning
便显示出了我们选的具体板子的io引脚图。
然后在下面我们点击这个,更方便的查看引脚对应我们的变量名。
然后把所有的IO表准都改成如下格式。
都改成33结尾的。
在实际开发板上
我们看到8个拨动开关,超过3个,可以用来选三个作为输入。
我们看一下引脚说明书。
这是这8个拨动开关的名字和编号。比如我们把输入a给SW2,那么对应就要选择E22。
比如我们把b给SW1,那么就要选择D22。我不再截图。
out
我们用LED灯来显示,找一个灯的接口赋值给output即可。观察输出即可看亮度。
对应此LED接口表连接即可。
我们直接让out[0]输出到灯LED0,以此类推。
然后ctrl+s保存即可。遇见弹框直接点OK。然后输入文件名。
保存即可。
可以找到一些被我们分配的IO口。
implementation or directly generate bitstream
也就是我们可以直接点击generate bitstream键一步到位。implementation
用来布局布线,generate bitstream
自动执行布局布线的操作。
我重启了项目之后点击了implementation
可以看到它会自动先从synthesis开始运行。
结束之后我们点击打开implemented design
如图所示,没有什么我们需要关注的。
然后生成比特流即可!
这里会显示状态。
然后我们打开硬件管理器,准备连接到硬件并且将比特流下载到硬件。
插上硬件之后点击
即可。
最后点击program devive
即可下载过去。然后直接在开发板对应输入开关处来回拨动即可。查看LED灯状态。