有段verilog代码看不懂,是夏宇闻书上的,求大牛指点

//mainFSMalways@(posedgesda)if(scl==1)stop_W_R;elsebegincasex(state)2'b01:beginread_i... //main FSM
always @(posedge sda)
if (scl == 1)
stop_W_R;
else
begin
casex(state)
2'b01: begin

read_in;

if (ctrl_byte == w7 || ctrl_byte == w6 || ctrl_byte == w5
||ctrl_byte == w4 || ctrl_byte == w3 || ctrl_byte == w2
||ctrl_byte == w1 || ctrl_byte ==w0)
begin
state = 2'b10;
write_to_eeprom;
end
else
state = 2'b00;
end
2'b11: read_from_eeprom; // read operation
default:
state = 2'b00;

endcase
end

一开始sda信号上升沿到来,触发这个always块。进入always块后,read in 这个任务会利用sda信号的变化,不断从sda信号读取数据。那么我的问题是,在执行read in 这个任务时,sda 信号会变化就会重新触发这个always块。这样这个read in这个任务可以执行完吗?好像陷入了死锁。大家是怎么理解的,可以解释下吗。先表示感谢
展开
 我来答
tigers19890102
2014-09-04 · TA获得超过291个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:111万
展开全部
虽然不太明白你问的是什么?但是我猜你还是和C语言或者matlab里面那种for循环有混淆。HDL里面这些边沿触发都是在某一时刻一次性的,而且也都是寄存器来说的,每次触发重新对寄存器进行一次赋值,然后等待下一次边沿触发,而不是像for循环那种不停执行的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
定格爱
2020-06-15
知道答主
回答量:52
采纳率:0%
帮助的人:10.2万
展开全部
根据条件不同,会转到不同的状态机里去,case state 最终会到stop或者idle状态
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式