概述
题目链接:https://hdlbits.01xz.net/wiki/Exams/ece241_2013_q4
题目的意思就是输入s表示着当前水位的状态,s1为1就表示水位在s1之上,这时就需要打开两个阀门fr1,fr2,然后如果之前的水阀数量比当前的多,那么dfr就是1,如果比现在的少,那dfr么就是0. 如果水位保持不变呢,dfr也保持不变。由于最低状态只能比当前得多,所以dfr一直都会是1,就算是水位不变,也要保持dfr1是1;同理最高水位一定是比之前的高,所以dfr一直是0.
module top_module (
input clk,
input reset,
input [3:1] s,
output reg fr3,
output reg fr2,
output reg fr1,
output reg dfr
);
//这六种状态分别是什么呢,A表示的是水位低于S1,D表示水位高于S3
//B1表示的是高于S1但是低于S2,同时,dfr是0,相对于B2是用来表示从C状态转换过来的,dfr是1的状态。C1,C2同理
parameter A = 0, B1=1,B2=2,C1=3,C2=4,D=5;
reg[2:0] state, next;
//注意只有这里的always是用的clk,其他的都是星号。
always@(posedge clk)begin
if(reset)
state <= A;
else
state <=next;
end
//这里就是状态转换,注意B1,B2,C1,C2的区别
always@(*)begin
case(state)
A:next <= s[1]?B1:A;
B1:next <= s[2]?C1:(s[1]?B1:A);
B2:next <= s[2]?C1:(s[1]?B2:A);
C1:next <= s[3]?D:(s[2]?C1:B2);
C2:next <= s[3]?D:(s[2]?C2:B2);
D:next <= s[3]?D:C2;
default:next <= A;
endcase
end
//这里是输出结果,根据不同的状态开不同的阀门和赋值不同的dfr
always@(*)begin
case(state)
A: {fr3,fr2,fr1,dfr} = 4'b1111;
B1: {fr3,fr2,fr1,dfr} = 4'b0110;
B2: {fr3,fr2,fr1,dfr} = 4'b0111;
C1: {fr3,fr2,fr1,dfr} = 4'b0010;
C2: {fr3,fr2,fr1,dfr} = 4'b0011;
D: {fr3,fr2,fr1,dfr} = 4'b0000;
default: {fr3, fr2, fr1, dfr} = 'x;
endcase
end
endmodule
最后
以上就是爱撒娇西装为你收集整理的Exams/ece241 2013 q4答案解析的全部内容,希望文章能够帮你解决Exams/ece241 2013 q4答案解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复