前言
本期讲的是一个状态机以及中断相结合的应用,展示的试验功能较为简单,主要是实现PL与PS部分的状态交互。
1.状态机部分
首先是状态机实现的功能。初始处于idle状态(led_idle亮起)收到开始指令(start)后切换到状态a,并向ps端发出一条指令,使ps端产生中断并执行相应命令(这里是输出一句话)。ps端完成任务后,返回一条指令done,状态机收到done指令后切换到状态b,并点亮led灯。保持b状态直到检测到按下按键(key),熄灭led并切回idle状态。
状态机代码
module blog(
input clk,
input rst_n,
input key,
input start,
input done,
output reg print,
output reg led_done,
output reg led_idle
);
parameter idle=0,a=1,b=2;
reg [1:0] state,nstate;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
state<=idle;
else
state<=nstate;
end
always @(*)begin
case(state)
idle:begin
if(start)
nstate=a;
else
nstate=state;
end
a:begin
if(done)
nstate=b;
else
nstate=state;
end
b:begin
if(key)
nstate=idle;
else

该文介绍了如何在Zynq平台上使用状态机和中断实现PL与PS部分的状态交互。状态机在接收到开始指令后触发PS端中断,PS端执行任务并返回响应后,状态机切换状态,LED灯亮起。当检测到按键按下时,状态机返回初始状态。文章提供了状态机代码、BlockDesign配置和Vitis中断处理程序的实现。
最低0.47元/天 解锁文章
9305

被折叠的 条评论
为什么被折叠?



