数字设计 FPGA 应用,数字设计 FPGA 应用,第四章时序逻辑设计和实现,课程设计性质的作业题2
第二题:再建一个工程,调用该 IP 核实现 0,1,2,3,6,7 输出序列的模 6 计数器,并在状态为 7 时输出 1。对该工程进行仿真测试(必须)
使用软件: Vivado
开发板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA
74HC163及IP核创建:箭头
1. 问题分析
(1)由题目可以状态转换图
(2)由状态转换图可以写出状态转移表
(3)画卡诺图得出转移方程输出方程
Q2*=Q2Q0'+Q2'Q1Q0
Q1*=Q1Q0'+Q2'Q0
Q0*=Q0'
Y=Q2Q1Q0
(4) 判断自启动
100/0 —>101/0 —>000/0
因此可以自启动
2. verilog代码(调用ip)
`timescale 1ns / 1ps
//
// Create Date: 2022/09/24 21:32:34
// Design Name:
// Module Name: v_74x163_ip
// Revision 0.01 - File Created
// Additional Comments:
//
//
//文章有用的话记得给靓仔点个赞表示鼓励哟~
module v_74x163_ip(clk,led);
input clk;
output led;
wire ld_l,rco;
wire[3:0] d;
wire[3:0] q;
assign d[3]=0,d[2]=((q[2])&(~q[0]))|((~q[2])&q[1]&q[0]),d[1]=q[1]&(~q[0])|(~q[2])&q[0],d[0]=~q[0];
assign led=q[0]&q[1]&q[2];
v_74x163_0 uut(
.clk(clk),
.clr_l(1), //清零端无效
.ld_l(0), //置数
.enp(1),
.ent(1),
.d(d),
.q(q),
.rco(rco)
);
endmodule
3. 仿真情况
3.1 仿真代码
`timescale 1ns / 1ps
//
// Create Date: 2022/09/24 20:55:51
// Design Name:
// Module Name: sim_74x163
// Revision 0.01 - File Created
// Additional Comments:
//
//
//文章有用的话记得给靓仔点个赞表示鼓励哟~
module sim_74x163();
reg clk=0;
reg clr_l=1;
reg ld_l=1;
reg enp=1;
reg ent=1;
reg[3:0] d=0;
wire[3:0] q;
wire rco;
v_74x163 uut(clk,clr_l,ld_l,enp,ent,d,q,rco);
always #10 clk=~clk;
endmodule
3.2 仿真结果
从仿真图中看到,实现了 0,1,2,3,6,7 输出序列的模 6 计数器,并在状态为 7 时输出 1
4. 下载进实验板测试
使用的EGO1实验板的晶振频率为100MHz,进行分频处理:
//分频处理
always@(posedge clk)//每过 1/100M s,divclk_cnt+1
begin
if(divclk_cnt == 50000000)//仿真的时候改成50
begin
divclk=~divclk;
divclk_cnt=0;
end
else
begin
divclk_cnt = divclk_cnt + 1'b1;
end
end
然后把verilog代码中的 uut函数传入的clk,改为divclk即可
约束文件:
## 时钟
set_property PACKAGE_PIN P17 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
## led
set_property PACKAGE_PIN F6 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]
生成比特流文件然后下载测试结果与仿真结果一致,每隔5s亮1s,表示满6进位: