|
小弟写了一个编码程序。也写了测试平台。在Modelsim中仿真时,当给负数激励时,输出就出现问题。一个很简单的功能,却不知道问题在那里。
恳请高手帮忙看看,小弟先谢谢了。附源码如下:
input[31:0] e,ec;
output[31:0] p,i,d;
reg [31:0]p,i,d;
reg [3:0] nume;
reg [3:0] numec;
wire [7:0]code;
reg[7:0] temp;
assign code=temp;
//????
always@(e)
begin
if(e<=-6) nume<=4'b1110;
if(e==-5) nume<=4'b1101;
if(e>-5 && e<-3) nume<=4'b1100;
if(e==-3) nume<=4'b1011;
if(e>-3 && e<-1) nume<=4'b1010;
if(e==-1) nume<=-4'b1001;
if(e==0) nume<=4'b0000;
if(e==1) nume<=4'b0001;
if(e>1 && e<3) nume<=4'b0010;
if(e==3) nume<=4'b0011;
if(e>3 && e<5) nume<=4'b0100;
if(e==5) nume<=4'b0101;
if(e>=6) nume<=4'b0110;
end
//???????
always@(ec)
begin
if(ec<=-6) numec<=4'b1110;
if(ec==-5) numec<=4'b1101;
if(ec>-5 && ec<-3) numec<=4'b1100;
if(ec==-3) numec<=4'b1011;
if(ec>-3 && ec<-1) numec<=4'b1010;
if(ec==-1) numec<=4'b1001;
if(ec==0) numec<=4'b0000;
if(ec==1) numec<=4'b0001;
if(ec>1 && ec<3) numec<=4'b0010;
if(ec==3) numec<=4'b0011;
if(ec>3 && ec<5) numec<=4'b0100;
if(ec==5) numec<=4'b0101;
if(ec>=6) numec<=4'b0110;
end
always@(nume,numec)
begin
temp<={numec,nume};
end
endmodule
//测试部分
`timescale 1ns/1ps
module test_pid();
reg [31:0]e,ec;
wire [31:0] p,i,d;
reg[2:0] j;
FUZZY_PID inst_fuzzy_pid(.e(e),
.ec(ec),
.p(p),
.i(i),
.d(d));
initial begin
e=0;
ec=0;
end
always
begin
for(j=0;j<7;j=j+1)
begin
e=j;
# 10 ec=0;
# 10 ec=1;
# 10 ec=2;
# 10 ec=3;
# 10 ec=4;
# 10 ec=5;
# 10 ec=6;
# 10 ec=-1;
# 10 ec=-2;
# 10 ec=-3;
end
end
endmodule
在线求教,等候回音。 |
|