EDA状态机程序帮我解释一下,重谢!

EDA状态机程序帮我解释一下,重谢!,第1张

module HDL_000(cp,a,b,y); //定义模块
input cp,a,b; //定义输入端口
output y; //定义输出端口
parameter yuan=0,q1=1,q2=2,q3=3,q4=4,q5=5;
//yuan q1 q2 q3 q4 q5 六个模块用数字代表定义
reg[2:0] c_s,n_s; //定义寄存器变量 这两个是状态机的中间变量
always@(posedge cp or posedge b) //always语句 当cp上升沿或b上升沿有效时启动
begin
if(b) c_s<=yuan; //当b有效时 把yuan即0赋给c_s变量
else c_s<=n_s; //否则将n_s的值赋给c_s变量
end
always@( a,c_s) //always语句当a或c_s有效时启动
begin
case(c_s) //case语句 利用c_s的值来判断跳转到对应处
yuan:if(a==1'b1) n_s<=q1; //当c_s为yuan的值时 当a为1 跳转到q1处
else n_s<=yuan; //否则 n_s跳转到yuan处
q1:if(a==1'b1) n_s<=q2; //当c_s为q1的值时 当a为1 跳转到q2处
else n_s<=yuan; //否则 n_s跳转到yuan处
q2:if(a==1'b0) n_s<=q3; //当c_s为q2的值时 当a为0 跳转到q3处
else n_s<=yuan; //否则 n_s跳转到yuan处
q3:if(a==1'b0) n_s<=q4; //当c_s为q3的值时 当a为0 跳转到q4处
else n_s<=yuan; //否则 n_s跳转到yuan处
q4:if(a==1'b1) n_s<=q5; //当c_s为q4的值时 当a为1 跳转到q5处
else n_s<=yuan; //否则 n_s跳转到yuan处
default: n_s<=yuan; //当c_s为default时 即非以上情况时 跳转到yuan处
endcase
end
assign y=(c_s==q5) 1:0; //assign语句 输出y端口的判断输出 c-s是否为q5 是输出1否0
endmodule
状态机一定要根据case语句画出状态图 这样看懂这一道 那你别的也能看懂 也会根据状态图写出程序 否则 学不会
其实状态机懂了之后蛮简单的 就是一个套路 仔细点就好~

以上就是关于EDA状态机程序帮我解释一下,重谢!全部的内容,包括:EDA状态机程序帮我解释一下,重谢!、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10641994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存