3535|6

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮忙看一下错误 [复制链接]

我是一个新手,刚编译一个乘法器程序,可总是有问题,不知怎么改,vhdl程序如下:
library IEEE;
      use IEEE.Std_logic_1164.all;
      
      ENTITY booth_multiplier IS
           GENERIC(k POSITIVE := 7);
           PORT(multiplicand, multiplier : IN BIT_VECTOR(k DOWNTO 0);
              clock : IN BIT; product : INOUT BIT_VECTOR((2*k + 1) DOWNTO 0));
      END booth_multiplier;
      
      ARCHITECTURE structural OF booth_multiplier IS
      
      SIGNAL mdreg, adderout, carries, augend, tcbuffout : BIT_VECTOR(k DOWNTO 0);
      SIGNAL mrreg : BIT_VECTOR((k + 1) DOWNTO 0);
      SIGNAL adder_ovfl : BIT;
      SIGNAL comp ,clr_mr ,load_mr ,shift_mr ,clr_md ,load_md ,clr_pp ,load_pp ,shift_pp : BIT;
      SIGNAL boostate : NATURAL RANGE 0 TO 2*(k + 1);
      
      BEGIN
      
      PROCESS
      BEGIN
              WAIT UNTIL (clock'EVENT AND clock = '1');
      
              
              IF clr_md = '1' THEN
                      mdreg <= (OTHERS => '0');
              ELSIF load_md = '1' THEN
                      mdreg <= multiplicand;
              ELSE
                      mdreg <= mdreg;
              END IF;
                     
      
              IF clr_mr = '1' THEN
                      mrreg <= (OTHERS => '0');
              ELSIF load_mr = '1' THEN
                      mrreg((k + 1) DOWNTO 1) <= multiplier;
                      mrreg(0) <= '0';
              ELSIF shift_mr = '1' THEN
                      mrreg <= mrreg SRL 1;
              ELSE
                      mrreg <= mrreg;
              END IF;
                     
              
              IF clr_pp = '1' THEN
                      product <= (OTHERS => '0');
              ELSIF load_pp = '1' THEN
                      product((2*k + 1) DOWNTO (k + 1)) <= adderout;
                      product(k DOWNTO 0) <= product(k DOWNTO 0);  
              ELSIF shift_pp = '1' THEN
                      product <= product SRA 1;
              ELSE
                      product <= product;
              END IF;
      
      END PROCESS;
      
      
      
      augend <= product((2*k+1) DOWNTO (k+1));
      addgen : FOR i IN adderout'RANGE
              GENERATE
                      lsadder : IF i = 0 GENERATE
                              adderout(i) <= tcbuffout(i) XOR augend(i) XOR comp;
                              carries(i) <= (tcbuffout(i) AND augend(i)) OR
                                            (tcbuffout(i) AND comp) OR
                                            (comp AND augend(i));
                              END GENERATE;
                      otheradder : IF i /= 0 GENERATE
                              adderout(i) <= tcbuffout(i) XOR augend(i) XOR carries(i-1);
                              carries(i) <= (tcbuffout(i) AND augend(i)) OR
                                            (tcbuffout(i) AND carries(i-1)) OR
                                            (carries(i-1) AND augend(i));
                              END GENERATE;
              END GENERATE;
            
              adder_ovfl <= carries(k-1) XOR carries(k);
      
      
      
      tcbuffout <= NOT mdreg WHEN (comp = '1') ELSE mdreg;
      
      
      
      PROCESS BEGIN  
              WAIT UNTIL (clock'EVENT AND clock = '1');
              IF boostate < 2*(k + 1) THEN boostate <= boostate + 1;
              ELSE boostate <= 0;
              END IF;
      END PROCESS;
      
      
      
      PROCESS(boostate)
      BEGIN
              
              comp <= '0';
              clr_mr <= '0';
              load_mr <= '0';
              shift_mr <= '0';
              clr_md <= '0';
              load_md <= '0';
              clr_pp <= '0';
              load_pp <= '0';
              shift_pp <= '0';
              IF boostate = 0 THEN
                      load_mr <= '1';
                      load_md <= '1';
                      clr_pp <= '1';
              ELSIF boostate MOD 2 = 0 THEN  
                      shift_mr <= '1';
                      shift_pp <= '1';
              ELSE    --boostate = 1,3,5,7......
                      IF mrreg(0) = mrreg(1) THEN
                              NULL; --refresh pp
                      ELSE
                              load_pp <= '1';         
                      END IF;
                      comp <= mrreg(1);      
              END IF;
      END PROCESS;
      
      END structural;
编译时总出现未知错误,为什么

最新回复

向 benjaminweber 学习 呵呵   详情 回复 发表于 2007-11-30 19:16
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用什么编译的?
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
max plus2
 
 
 

回复

41

帖子

0

TA的资源

禁止发言

4
 
易安数据恢复010--51293635硬盘数据恢复数码相机数据恢复 密码破解密 服务器数据恢复

U盘数据恢复 移动硬盘数据恢复 解密 密码破解 文件夹加密解密 苹果机数据恢复
苹果电脑数据恢复linux数据恢复

公司网址:http://www.51huifu.com/

北京易安信息安全研究中心 7x24小时数据急救热线:010--51293635

data recovery ,hard drive data recovery digital camera data recovery

http://www.51huifu.com/en

1:可恢复介质:

一切存储数据的介质。包括台式机硬盘,笔记本硬盘,移动硬盘,服务器硬盘,手机,U盘,MP3,MP4数码相机使用的CF卡,sm卡,MMC,数码伴侣,录音笔,录音棒,磁带机等数据恢复


2:可恢复故障:


软故障:
系统故障:CMOS认盘,系统不认盘;系统认盘但无法识别分区;整个硬盘所有分区丢失,显示:“未指派空间”;系统可以识别出分区,双击时提示:“未格式化”;分区可以正常读取,可以正常打开,但读数据时提示:“循环冗余错误”或“I/O错误”;
文件丢失:分区误格式化;文件误删除;误GHOST后整个硬盘变成一个分区;重装系统时选错分区对数据覆盖操作;某个分区突然变成空盘,属性显示占用空间数正常;分区容量显示“0字节”
其它:OFFICE(WORD、EXCEL等)文件密码破解,移动硬盘,U盘解密、WINRAR WINZIP压缩文件密码破解。
服务器RAID硬盘指示灯亮红灯、无法正常启动、RAID硬盘顺序搞错
双击U盘,MP3时,提示:请插入磁盘...或提示:“找不到驱动器”
手机上的短信,通讯录(电话本)误删除恢复
重装系统时,在DOS下格式化C盘,安装完系统后D盘为空,数据全部丢失

硬故障:


A、CMOS不认盘

B、常有一种“咔嚓咔嚓”的磁头撞击声

C、电机不转,通电后无任何声音

D、磁头错位造成读写数据错误等
CMOS不认硬盘或系统不认盘;
常有一种“咔嚓咔嚓”或“卡卡”的磁头撞击声;
电机不转,通电后无任何声音;
坏道: 由于错误关机或突然断电,硬盘使用时间长久,硬盘盘片会出现坏道,无法导出或无法读取。



区分软硬件故障的方法是:误操作等属于软件故障,操作系统能正确识别到的属于软件故障;不能被系统正确识别的为硬件故障,如果CMOS不认肯定是硬件故障,如果CMOS认,但系统不认,也定为硬件故障



公司名称:北京易安信息安全研究中心  http://www.51huifu.com


恢复热线: 010--51293635


手 机:13466554107 13717575458(24小时) QQ:86868227








搜索关键字:江西数据恢复,江西恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,南昌数据恢复,南昌恢复数据,南昌硬盘数据恢复,硬盘数据,CF卡,山东数据恢复,山东恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,荷泽数据恢复,荷泽恢复数据,荷泽硬盘数据恢复,硬盘数据,CF卡,江西数据恢复,江西恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,新余数据恢复,新余恢复数据,新余硬盘数据恢复,硬盘数据,CF卡,山东恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,青岛数据恢复,青岛恢复数据,青岛硬盘数据恢复,硬盘数据,CF卡,山东恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,青岛数据恢复,青岛恢复数据,青岛硬盘数据恢复,硬盘数据,CF卡,山东恢复数据,恢复数据,datarecovery,硬盘数据恢复,硬盘恢复数据,U盘数据,移动硬盘数据恢复,数码相机数据恢复,照片误删除,误删除,青岛数据恢复,青岛恢复数据,青岛硬盘数据恢复,硬盘数据,CF卡,
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
至于吗?直接写一个乘号不行吗?干吗非自己写bit级别的。

一般用std_logic和std_logic_vector得比较好一些,当然你的也可以。

product干吗是inout,inout必须在顶层,而且必须以三态方式,否则无法综合。你的product显然不是三态门。

max plusII? 太古老了吧?
建议使用ModelSim + Quartus II.

wait语句不能综合。建议把clock放到testbench里面去。能综合的放一起,测试的代码放一起,你这么些,什么也不算呀。

Process要分开写。不要在一个process里给很多不相关的信号赋值。不相关的信号放在不同的process里面。

时钟触发的process不是这么写的,应该这样:
lock_write : PROCESS (PCLK, PRST)
  BEGIN
          IF PRST = '0' THEN
                  reg_data_write <= (OTHERS => '0');
                  reg_write_m <= '0';
          ELSIF PCLK'EVENT AND  PCLK = '1' THEN
                  IF wr_flag = '1' AND reg_write_m = '0' THEN
                          reg_data_write <= PWDATA(31 DOWNTO 0);
                          reg_write_m <= '1';
                  ELSE
                          reg_data_write <= PWDATA(31 DOWNTO 0);
                          reg_write_m <= '0';
                  END IF;
          END IF;
END PROCESS lock_write;

PCLK是我的时钟。

好久没写了VHDL了,慢慢努力。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
好复杂
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
向 benjaminweber 学习 呵呵

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表