集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2361|回复: 3

verilog一个关于简化ont-hot编码问题

[复制链接]
七郎仔 发表于 2010-6-25 23:30:51 | 显示全部楼层 |阅读模式
verilog一个关于简化ont-hot编码问题
parameter[3:0]
s0=4'd0,
s1=4'd1,
s2=4'd2,
s3=4'd3;
[email=always@(posedge]always@(posedge[/email] clk or rest)
if(rest)begin
state<=5'b0;
state[s0]<=1'b'1;
end
else state<=next;
[email=always@(state]always@(state[/email] or x)begin
next=5'b0;
y=1'b0;
case(1'b1)
state[s0]:
begin
if(......) next[s1]=1'b1;
state[s0]:  if(......) next[s1]=1'b1;else.....
state[s1]:  if(......) next[s2]=1'b1;else.....
state[s2]:  if(......) next[s3]=1'b1;else.....
state[s3]:  if(......) next[s0]=1'b1;else...
end
endcase
end
endmodule

这个是简化的one-hot编码,每个状态向量只有一位为1,其余为0;
我不明白的是,当所有状态都循环一遍的时候,那么next就不是只有一个1了,因为过程中没有给next清零,要复位时state才会全部清零.
,这时state中也不只一位为1,那么case(1'b1)下,究竟如何执行?
yangyangnuc 发表于 2012-6-15 21:00:59 | 显示全部楼层
我觉得你的状态机
不是one-hot编码
因为 状态分别为
0000   0001    0010    0011   
不符合 one-hot 编码
zhouliang 发表于 2012-6-24 11:34:15 | 显示全部楼层
回复 1# 七郎仔


    next=5'b0;
y=1'b0;
case(1'b1)


这个是阻塞赋值语句吗,如果是这样,每次循环next都会先清零,然后执行下面的case语句
zombes 发表于 2012-7-8 12:14:21 | 显示全部楼层
这应该是独热码代码:
2楼理解不对,s0 s1..是[]内数,表示的是next或者state的第s位,也就是第0位,第1位..,所以可以看出是独热码
3楼理解没错,补充一句,设计中采用的是两段式的状态机写法,其中第二段是组合逻辑,所以采用阻塞赋值,关于next的赋值是先清零,然后再将其某一位置1,涉及到一个原则:如果在同一个begin end中对同一量重复赋值,那么以后一次为准(具体涉及到编译器,但基本是这样的)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-26 02:05 , Processed in 0.101843 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表