有关Verilog HDL的问题 跪求各位高手解读 万分感谢!!!
发布网友
发布时间:2022-06-01 02:28
我来回答
共3个回答
热心网友
时间:2023-11-13 02:14
mole contr(clk,ad_d,ad_eoc,ad_start,ad_a,ad_data,ad_clk); //应该是一个控制模块contr
input clk,ad_eoc;
input[7:0] ad_d; //输入的信号是,时钟clk,8位的ad_d,1位ad_eoc
output ad_a,ad_start,ad_clk;
output[7:0] ad_data; //输出的信号,其中ad_data为8位
reg[7:0] ad_data;
reg ad_a,ad_clk,ad_start; //输出信号寄存
reg[2:0] current_state,next_state; //定义状态机
reg lock;
parameter[2:0] st0='b000,st1='b001,st2='b010,st3='b011,st4='b100; //状态机状态变量定义
always
begin
ad_clk=clk;
end //时钟信号直接输出,相当于assign ad_clk=clk;
always @ (posedge clk)
begin
current_state=next_state;
end //将一个状态赋给当前状态,状态转换
always @ (posedge clk)
begin
ad_data=ad_d;
end //将ad_d数据直接赋ad_data
always @ (current_state or ad_eoc)
begin //根据当前状态和ad_eoc的值进行状态跳变
case (current_state)
st0 :begin
ad_start='b0;ad_a='b0;lock='b0;next_state=st1; //初始值均为0,并且自动跳转到st1状态
end
st1 :begin
ad_start='b1;ad_a='b0;lock='b0;next_state=st2;//自动跳转到st2状态
end
st2 :begin
ad_start='b0;ad_a='b0;lock='b0;
if (ad_eoc == 'b1) next_state = st3; //进入状态st2,等待ad_eoc为高电平,并进入st3状态,否则依然st2状态
else next_state =st2;
end
st3 :begin
ad_start='b0;ad_a='b1;lock='b0;next_state=st4;//使得输出信号ad_a为1,并自动跳入到st4状态
end
st4 :begin
ad_start='b0;ad_a='b1;lock='b1;next_state=st0;//跳转到st0状态,并且使得输出ad_a为1,并锁存一个周期,
end
default :begin
ad_start='b0;ad_a='b0;lock='b0;next_state=st0; //默认跳转程序
end
endcase
end
endmole
该程序应该是一个检测ad_eoc的程序,即一个结束标志的程序,当最后接收到一个ad_eoc程序时启动状态机的st3状态,并使得输出的ad_a持续两个周期,并输出一个周期的lock的高电平,然后再检测下一个ad_eoc的到来。
热心网友
时间:2023-11-13 02:14
同求!我也想知道了!坐等答案!
热心网友
时间:2023-11-13 02:15
什么问题都不说清楚?