Verilog HDL syntax error :always<-
答案:1 悬赏:10
解决时间 2021-01-28 22:16
- 提问者网友:谁的错
- 2021-01-27 22:20
Verilog HDL syntax error :always<-
最佳答案
- 二级知识专家网友:神的生死簿
- 2021-01-27 23:18
那个,很不好意思说。
assign F=Y_L[0]&Y_L[1]&Y_L[2]&Y_L[3]&Y_L[4]|
~(Y_L[5]&Y_L[6]&Y_L[7]&Y_L[8]&Y_L[9]&Y_L[10]&
Y_L[11]&Y_L[12]&Y_L[13]&Y_L[14]&Y_L[15])
这句后面没有加“分号”。
然后 if 语句后面如果有多句话,注意Begin ... end 的包含关系。
然后,case后面信号的位宽最好表示清楚。
最后,加注释~
另外,对不同的信号赋值,最好放到不同的ALWAYS里面,我觉得
勉强通过的程序
module L74x138yang(F,G2B_L,D,A,G1);
input [2:0] A;
input G1,D,G2B_L;
output F;
reg G2B,G2A_L;
reg [0:15] Y_L,Y;
assign F=Y_L[0]&Y_L[1]&Y_L[2]&Y_L[3]&Y_L[4]|
~(Y_L[5]&Y_L[6]&Y_L[7]&Y_L[8]&Y_L[9]&Y_L[10]&
Y_L[11]&Y_L[12]&Y_L[13]&Y_L[14]&Y_L[15]);
always @(G1 or G2B_L or D or G2A_L or A or Y)
begin
G2B=~G2B_L;
Y_L=~Y;
if(~D)
begin
G2A_L=D;
if(G1&G2A_L&G2B)
begin
case(A)
3'd0:Y=16'b1000000000000000;
3'd1:Y=16'b0100000000000000;
3'd2:Y=16'b0010000000000000;
3'd3:Y=16'b0001000000000000;
3'd4:Y=16'b0000100000000000;
3'd5:Y=16'b0000010000000000;
3'd6:Y=16'b0000001000000000;
3'd7:Y=16'b0000000100000000;
default: Y=16'b0000000000000000;
endcase
end
else Y=16'b0000000000000000;
end
else if(D)
begin
G2A_L=~D;
if(G1&~G2A_L&G2B)
begin
case(A)
3'd0:Y=16'b0000000010000000;
3'd1:Y=16'b0000000001000000;
3'd2:Y=16'b0000000000100000;
3'd3:Y=16'b0000000000010000;
3'd4:Y=16'b0000000000001000;
3'd5:Y=16'b0000000000000100;
3'd6:Y=16'b0000000000000010;
3'd7:Y=16'b0000000000000001;
default: Y=16'b0000000000000000;
endcase
end
else Y=16'b0000000000000000;
end
else Y=16'b0000000000000000;
end
endmodule
assign F=Y_L[0]&Y_L[1]&Y_L[2]&Y_L[3]&Y_L[4]|
~(Y_L[5]&Y_L[6]&Y_L[7]&Y_L[8]&Y_L[9]&Y_L[10]&
Y_L[11]&Y_L[12]&Y_L[13]&Y_L[14]&Y_L[15])
这句后面没有加“分号”。
然后 if 语句后面如果有多句话,注意Begin ... end 的包含关系。
然后,case后面信号的位宽最好表示清楚。
最后,加注释~
另外,对不同的信号赋值,最好放到不同的ALWAYS里面,我觉得
勉强通过的程序
module L74x138yang(F,G2B_L,D,A,G1);
input [2:0] A;
input G1,D,G2B_L;
output F;
reg G2B,G2A_L;
reg [0:15] Y_L,Y;
assign F=Y_L[0]&Y_L[1]&Y_L[2]&Y_L[3]&Y_L[4]|
~(Y_L[5]&Y_L[6]&Y_L[7]&Y_L[8]&Y_L[9]&Y_L[10]&
Y_L[11]&Y_L[12]&Y_L[13]&Y_L[14]&Y_L[15]);
always @(G1 or G2B_L or D or G2A_L or A or Y)
begin
G2B=~G2B_L;
Y_L=~Y;
if(~D)
begin
G2A_L=D;
if(G1&G2A_L&G2B)
begin
case(A)
3'd0:Y=16'b1000000000000000;
3'd1:Y=16'b0100000000000000;
3'd2:Y=16'b0010000000000000;
3'd3:Y=16'b0001000000000000;
3'd4:Y=16'b0000100000000000;
3'd5:Y=16'b0000010000000000;
3'd6:Y=16'b0000001000000000;
3'd7:Y=16'b0000000100000000;
default: Y=16'b0000000000000000;
endcase
end
else Y=16'b0000000000000000;
end
else if(D)
begin
G2A_L=~D;
if(G1&~G2A_L&G2B)
begin
case(A)
3'd0:Y=16'b0000000010000000;
3'd1:Y=16'b0000000001000000;
3'd2:Y=16'b0000000000100000;
3'd3:Y=16'b0000000000010000;
3'd4:Y=16'b0000000000001000;
3'd5:Y=16'b0000000000000100;
3'd6:Y=16'b0000000000000010;
3'd7:Y=16'b0000000000000001;
default: Y=16'b0000000000000000;
endcase
end
else Y=16'b0000000000000000;
end
else Y=16'b0000000000000000;
end
endmodule
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯