如何为Verilog HDL中的解码器简化输入

问题描述 投票:0回答:1

我正在为FPGA设计解码器。 Verilog代码可以编译,但是开关不执行任何操作。我仔细检查了一下引脚分配,它们是正确的,所以我猜我的代码存在一些逻辑问题。

/ *真值表是:

enable  p  a1  a0  y0  y1  y2  y3  
0       0  0   0   1   0   0   0
0       0  0   1   0   1   0   0
0       0  1   0   0   0   1   0
0       0  1   1   0   0   0   1
0       1  0   0   0   1   1   1
0       1  0   1   1   0   1   1
0       1  1   0   1   1   0   1
0       1  1   1   1   1   1   0
1       x  x   x   x   z   z   z

这是我的代码:

*/
module decoder2x4( 
input enable,
input p,
input [1:0] a,
output [3:0] y
);

assign y[0] = (( ~p & ~a[1] & ~a[0]) | (~a[1] & a[0]) |(a[1] & ~a[0]) |     ( p & a[1] & a[0]) ) & ~enable;
assign y[1] = (( ~p & ~a[1] & a[0]) | ( p & ~a[1] & ~a[0]) |( p & a[1] & ~a[0])| ( p & a[1] & a[0])) & ~enable;
assign y[2] = (( ~p & a[1] & ~a[0]) | ( p & ~a[1] & ~a[0]) |( p & ~a[1] & a[0])| ( p & a[1] & a[0])) & ~enable;
assign y[3] = (( ~p & a[1] & a[0]) | ( p & ~a[1] & ~a[0]) |( p & ~a[1] & a[0])| ( p & a[1] & ~a[0])) & ~enable;

endmodule
boolean verilog decoder quartus truthtable
1个回答
0
投票

除非是学校作业,否则这不是您使用HDL代码的方式。

我已将Pierre.Vriens的作品复制到这张桌子上:

enable  p  a1  a0  y0  y1  y2  y3  
0       0  0   0   1   0   0   0
0       0  0   1   0   1   0   0
0       0  1   0   0   0   1   0
0       0  1   1   0   0   0   1
0       1  0   0   0   1   1   1
0       1  0   1   1   0   1   1
0       1  1   0   1   1   0   1
0       1  1   1   1   1   1   0
1       x  x   x   x   z   z   z   <<< Probably a typo here

底线有点特殊,因此我使用if。我们可以在情况下设置重置:

always @( * )
begin
   if (enable)
      {y0, y1, y2, y3} = 4'hz; // **
   else
      case ( {p, a1, a0 } )
      3'b000 : {y0, y1, y2, y3} = 4'b1000;
      3'b001 : {y0, y1, y2, y3} = 4'b0100;
      3'b010 : {y0, y1, y2, y3} = 4'b0010;
      3'b011 : {y0, y1, y2, y3} = 4'b0001;
      3'b100 : {y0, y1, y2, y3} = 4'b0111;
      3'b101 : {y0, y1, y2, y3} = 4'b1011;
      3'b110 : {y0, y1, y2, y3} = 4'b1101;
      3'b111 : {y0, y1, y2, y3} = 4'b1110;                   
      endcase
end // always 

请注意,这会尽可能多地复制原始表,从而减少了出错的可能性。具有列编辑功能的编辑器有很大帮助!

**我假设您希望所有输出均为'z'。在您的表中有xzzz。

© www.soinside.com 2019 - 2024. All rights reserved.