qzqsan 发表于 2011-10-11 20:26:13

代码综合之后没有消耗任何的逻辑单元,只报警,无错误,问什么呢?求助

module MENC_Div(
                                        in1_A,in1_B,
                                        rst_n,                       
                                        out_A,out_B
                                );
input in1_A;
input in1_B;
input rst_n;
output out_A;
output out_B;

reg oldAB;
reg status;
reg cnt;
reg out_A_reg,out_B_reg;

//用于对in1_A、in1_B下降沿敏感
wire in2_A=~in1_A;
wire in2_B=~in1_B;
wire AB={in1_A,in1_B};

//输入A、B辩向,生成状态数据status
always @ (        posedge in1_A or posedge in2_A or
                        posedge in1_B or posedge in2_B or
                        negedge rst_n)
begin
        if(!rst_n)
                begin
                        //AB=2'b00;
                        oldAB=AB;
                        status=2'b00;
                end
        else
                begin                                                                                //编码器增量信号解码
                        //AB={in1_A,in1_B};       
                        case (AB)
                                2'b00 :
                                                case (oldAB)
                                                        2'b01 : status=2'b01;        //2'b01-正转
                                                        2'b10 : status=2'b10;        //2'b10-反转
                                                        default :status=2'b11;        //2'b00、2'b11-错误信号
                                                endcase
                                2'b01 :
                                                case (oldAB)
                                                        2'b00 : status=2'b10;        //反转
                                                        2'b11 : status=2'b01;        //正转
                                                        default :status=2'b11;
                                                endcase
                                2'b10 :
                                                case (oldAB)
                                                        2'b00 : status=2'b01;        //正转
                                                        2'b11 : status=2'b10;        //反转
                                                        default :status=2'b11;
                                                endcase               
                                2'b11 :
                                                case (oldAB)
                                                        2'b01 : status=2'b10;        //反转
                                                        2'b10 : status=2'b01;        //正转
                                                        default :status=2'b11;
                                                endcase
                                //default :;
                        endcase       
                        oldAB<=AB;//不能用阻塞               
                end
end

//循环的对A、B的沿计数,1-15,生成counter
always @ (        posedge in1_A or //posedge in2_A or
                        //posedge in1_B or //posedge in2_B or
                        negedge rst_n
                        )//两个敏感时可以编译、综合,但也不对
                        //三个敏感时,报错
begin
        if(!rst_n)
                cnt<=1'b1;
        else
                if(status==2'b01)                                         //2'b01-正转
                        if(cnt==4'd15)cnt<=1'b1;
                        else cnt<=cnt+1'b1;
                else
                        if(status==2'b10)                                //2'b10-反转
                                if(cnt==4'd15)cnt<=4'd15;
                                else cnt<=cnt-1'b1;
                        else cnt<=1'b1;                                        //2'b00、2'b11-错误信号
end

assign out_A=out_A_reg;
assign out_B=out_B_reg;
/*
always @ (negedge rst_n)                       
begin
        if(!rst_n)
        begin
                                out_A_reg=in2_A;//{out_A_reg,out_B_reg}=2'b00;
                                out_B_reg=in2_B;
        end
end*/


//生成输出A1、B1        组合逻辑
always @ (        cnt or rst_n)                       
begin
        if(!rst_n)
                begin
                        out_A_reg<=1'b0;//{out_A_reg,out_B_reg}=2'b00;
                        out_B_reg<=1'b0;
                end
        else
                if(cnt<=4'd4)
                        begin
                                out_A_reg<=1'b0;                                //{out_A_reg,out_B_reg}=2'b00;        //任意构建一个正交周期波形
                                out_B_reg<=1'b0;
                        end
                else
                        if(cnt<=4'd7)                              //{out_A_reg,out_B_reg}=2'b10;
                                begin
                                        out_A_reg<=1'b1;
                                        out_B_reg<=1'b0;
                                end       
                        else
                                if(cnt<=4'd11)                       //{out_A_reg,out_B_reg}=2'b11;
                                        begin
                                                out_A_reg<=1'b1;
                                                out_B_reg<=1'b1;
                                        end
                                else
                                        if(cnt<=4'd15)                //{out_A_reg,out_B_reg}=2'b01;
                                                begin
                                                        out_A_reg<=1'b0;
                                                        out_B_reg<=1'b1;
                                                end       
                                        else
                                                begin
                                                        out_A_reg<=1'bx;        //不关心,该情况不可能出现
                                                        out_B_reg<=1'bx;
                                                end                                                       
end

endmodule


报警如下:
Warning: Output pins are stuck at VCC or GND
        Warning (13410): Pin "out_A" is stuck at GND
        Warning (13410): Pin "out_B" is stuck at GND
Warning: Design contains 3 input pin(s) that do not drive logic
        Warning (15610): No output dependent on input pin "rst_n"
        Warning (15610): No output dependent on input pin "in1_A"
        Warning (15610): No output dependent on input pin "in1_B"
Warning: Following 2 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results
        Info: Pin out_A has GND driving its datain port
        Info: Pin out_B has GND driving its datain port
Warning: No paths found for timing analysis

xuyeyue 发表于 2011-10-11 23:43:26

我试试。。。。。。。

xuyeyue 发表于 2011-10-11 23:56:48

将你的

begin //编码器增量信号解码
//AB={in1_A,in1_B};
case (AB)
2'b00 :
case (oldAB)

第三行的AB改成status

xcreat 发表于 2011-10-12 09:48:10

你写的逻辑有问题,全被优化掉了。另外,语言是语言,能不能综合是另一码事,记住fpga里面都是d触发器,不是你说上升沿触发就可以的,没有时钟,编译器按照锁存器的方式综合。

qzqsan 发表于 2011-10-12 12:17:38

怎么自己发的帖,自己都不能访问了,公司的ip地址!

之前在网上找过,是被优化掉了!那我怎么才能让他按我设计的综合呢?
设计思路:对编码器的A、B的沿计数和辨向,根据计数值和方向输出另外两路AB信号

qzqsan 发表于 2011-10-12 12:17:58

怎么自己发的帖,自己都不能访问了,公司的ip地址!

之前在网上找过,是被优化掉了!那我怎么才能让他按我设计的综合呢?
设计思路:对编码器的A、B的沿计数和辨向,根据计数值和方向输出另外两路AB信号

qzqsan 发表于 2011-10-12 12:33:49

他现在提示的是输入与输出不相关,可逻辑里面是有关联的啊,只是经过了中间reg

xcreat 发表于 2011-10-13 11:23:46

1,比较方便的方法,用几个非门做个时钟,用这个时钟做对输入信号进行采样判断。
2,不使用触发器的方法写,使用门逻辑,从网上找找有没有类似的逻辑门电路设计的,用语言表述出来就行

qzqsan 发表于 2011-10-15 00:38:44

嗯,谢谢xcreat耐心的回复!我现在采用一个高速采样时钟,现在把代码改进了,都作为时序电路。现在用写的testbech做仿真,但信号没出来,正在一步一步找原因!
问个很弱的问题,如果这步功能仿真过去了的话,最终在实际硬件中会出现什么问题吗?呵

xcreat 发表于 2011-10-15 16:42:09

注意实际输入的信号有没有毛刺

qzqsan 发表于 2011-11-2 00:19:20

改进后综合、下载调试过去了,可是又新加了模块…纠结中…
页: [1]
查看完整版本: 代码综合之后没有消耗任何的逻辑单元,只报警,无错误,问什么呢?求助