仪器社区

Verilog 83优先编码器

小狐狸密码 2017-09-26
这个是83优先编码器 书上写的程序 module code8_3(I,Y); input[7:0]I; output[2:0]Y; function[2:0]code; input[7:0]I; if(I[7]) code=3'b111; else if(I[6]) code=3'b110; else if(I[5]) code=3'... 这个是83优先编码器 书上写的程序 module code8_3(I,Y); input[7:0]I; output[2:0]Y; function[2:0]code; input[7:0]I; if(I[7]) code=3'b111; else if(I[6]) code=3'b110; else if(I[5]) code=3'b101; else if(I[4]) code=3'b100; else if(I[3]) code=3'b011; else if(I[2]) code=3'b010; else if(I[1]) code=3'b001; else code=3'b000; endfunction assign Y=code(I); endmodule 为什么不能这么写: module code8_3(I,Y); input[7:0]I; output[2:0]Y; reg[2:0]Y always @ (I) begin if(I[7]) Y=3'b111; else if(I[6]) Y=3'b110; else if(I[5]) Y=3'b101; else if(I[4]) Y=3'b100; else if(I[3]) Y=3'b011; else if(I[2]) Y=3'b010; else if(I[1]) Y=3'b001; else Y=3'b000; end endmodule 麻烦高手指教一下吧!另外assign A={B,C}是代表什么意思啊?多谢多谢!!
评论
全部评论
初心暖哭i
先回答你第二个问题
assign A={B,C} 代表 A = B+C 的组合位宽的值
例如:
wire [1:0]A ;
wire B,C;
A={B,C}; //A 是2位宽的, B是1位宽的, C是1位宽的,这样 A[1] 就对应 B ,A[0] 就对应C.

//如果
A={C,B}; //哪么 这样 A[1] 就对应 C ,A[0] 就对应B.

再回答你diyi个问题
可以用你的方法写(即用always)。但是你写的程序有个地方有错,改一下就可以了。书上用的是function ,而你用的是always。这两种方法比较如下:
1,如果在本模块内,你需要实现2个83优先编码器,哪么就可以直接调用 function 模块就行了,这样使程序更简洁。
2,如果在本模块内只需要实现一个83优先编码器,就可以用 always ,在需要的地方直接调用该模块。更利于综合。

//修改后代码如下

module code8_3(I,Y);
input[7:0]I;
output[2:0]Y;
reg[2:0]Y
always @ (I or Y) //这里必须包括所有的下面要用到的信号名称 你原来是(I).少了一个Y .(也可以用*号代替 I 和 Y).
begin
if(I[7]) Y=3'b111;
else if(I[6]) Y=3'b110;
else if(I[5]) Y=3'b101;
else if(I[4]) Y=3'b100;
else if(I[3]) Y=3'b011;
else if(I[2]) Y=3'b010;
else if(I[1]) Y=3'b001;
else Y=3'b000;
end
endmodule
20 0 2017-09-26 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论