集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 7524|回复: 3

请教如何在Verilog中表示负数

[复制链接]
sepathy@163.com 发表于 2010-12-21 10:38:29 | 显示全部楼层 |阅读模式
小弟写了一个编码程序。也写了测试平台。在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

在线求教,等候回音。
 楼主| sepathy@163.com 发表于 2010-12-21 10:42:07 | 显示全部楼层
下面是仿真时候的输出结果。当激励为负数的时候,输出结果就不是按程序设计来的。怎么改?为什么呢?[img

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
兜里有糖糖 发表于 2010-12-21 21:18:44 | 显示全部楼层
modelsim   负数是补码。。。
miwueshine 发表于 2010-12-24 10:09:25 | 显示全部楼层
负数采用的是补码格式,这点请楼主注意
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-28 08:42 , Processed in 0.060393 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表