BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #715同步于 2007/5/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

[合集] 一个关于VHDL的问题

pooh1949
2007/5/20镜像同步0 回复
☆─────────────────────────────────────☆ Earth (★严守一殿下★♂) 于 (Fri May 11 08:57:54 2007) 提到: 近来在做16位模数转换信号由七位数码管显示的工作,想分两个模块,把16位的二进制数字转换到五位最大32768的十进制后再显示出来,但串行输出的16位二进制信号在转换成10进制信号的时候不可能一个一个的一一对应,只好通过算法来实现,为此我编了一个程序,但在fitter前总出现error,是一个i/o错误,无法写入.R12文件,不知道是为什么,请高人指点,程序如下: --假设16位2进制串行信号由低位开始传递 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_signed.all; entity yima2_10 is port(clk:in std_logic;--时钟 cin:in std_logic_vector(0 to 15);--16位的二进制输入信号 coutut integer range 0 to 99999);--五位的10进制整数输出信号 end entity; architecture rtl of yima2_10 is signal i:integer range 0 to 15;--计数器 begin process variable temp,n2:integer range 0 to 99999;--temp是输出的中间信号,n2是代表2的n次方的值 begin wait until clk='1'; for i in 0 to 15 loop if(i=0)then --之后的几行代表在i等于某一个值的时候那个位所代表的十进制数 n2:=1; elsif(i=1)then n2:=2; elsif(i=2)then n2:=4; elsif(i=3)then n2:=8; elsif(i=4)then n2:=16; elsif(i=5)then n2:=32; elsif(i=6)then n2:=64; elsif(i=7)then n2:=128; elsif(i=8)then n2:=256; elsif(i=9)then n2:=512; elsif(i=10)then n2:=1024; elsif(i=11)then n2:=2048; elsif(i=12)then n2:=4096; elsif(i=13)then n2:=8192; elsif(i=14)then n2:=16384; elsif(i=15)then n2:=32768; end if; if (cin(i)='1')then temp:=temp+n2; else temp:=temp; end if; end loop;--循环一遍,如果该位为1,则将这个位对应的十进制数加进来,如果是0则保持原有,并进入下一循环 cout<=temp; end process; end architecture;并行输出该值然后结束 ☆─────────────────────────────────────☆ wa (wawawa) 于 (Fri May 11 14:38:41 2007) 提到: vhdl有case语句吧 ☆─────────────────────────────────────☆ AAmy (大当家的小mj) 于 (Fri May 11 18:20:06 2007) 提到: 有 我还感觉刚才那样好繁琐 【 在 wa (wawawa) 的大作中提到: 】 : vhdl有case语句吧 ☆─────────────────────────────────────☆ fzylijun886 (北邮人) 于 (Sat May 12 08:27:43 2007) 提到: lz的程序写的有点乱,写vhdl不是但从软件来编程,比方说你的if语句完全可以用case实现,编vhdl的时候基本要知道自己的电路是什么样子的,8421码制转换其实就是加6减6操作,lz的算法设计是没有问题的,希望lz把设计思路转化成时序电路图自己画一下看看要有多少级,你的芯片能不能装下?fitter出现问题基本不是算法问题了,有可能不是硬件编程思维,毕竟硬件资源是有限的。 欢迎拍砖~~~ ☆─────────────────────────────────────☆ Earth (★严守一殿下★♂) 于 (Mon May 14 08:20:44 2007) 提到: 我用的是10k10,这个程序占用了百分之27,我再看看怎么改改吧,可I/O错误是怎么回事呢? 【 在 fzylijun886 的大作中提到: 】 : lz的程序写的有点乱,写vhdl不是但从软件来编程,比方说你的if语句完全可以用case实现,编vhdl的时候基本要知道自己的电路是什么样子的,8421码制转换其实就是加6减6操作,lz的算法设计是没有问题的,希望lz把设计思路转化成时序电路图自己画一下看看要有多少级,你的芯片能不能装下?fitter出现问题基本不是算法问题了,有可能不是硬件编程思维,毕竟硬件资源是有限的。 : 欢迎拍砖~~~ ☆─────────────────────────────────────☆ RhettButler (TomorrowIsAnotherDay) 于 (Mon May 14 08:37:15 2007) 提到: 【 在 Earth 的大作中提到: 】 : 我用的是10k10,这个程序占用了百分之27,我再看看怎么改改吧,可I/O错误是怎么回事呢? 如果这样一个程序占了10K10百分之27的内存,那你的程序是该改了 ☆─────────────────────────────────────☆ fzylijun886 (北邮人) 于 (Mon May 14 09:22:22 2007) 提到: 很多可能性啊,27%是总体看的,你看看I/O资源的占用? 【 在 Earth 的大作中提到: 】 : 我用的是10k10,这个程序占用了百分之27,我再看看怎么改改吧,可I/O错误是怎么回事呢? ☆─────────────────────────────────────☆ abolide (NIOS II) 于 (Mon May 14 12:54:04 2007) 提到: port(clk:in std_logic;--时钟 cin:in std_logic_vector(0 to 15);--16位的二进制输入信号 cout:out integer range 0 to 99999);--五位的10进制整数输出信号 end entity; 这样修改就对了, 估计是你笔误。 【 在 Earth 的大作中提到: 】 : 近来在做16位模数转换信号由七位数码管显示的工作,想分两个模块,把16位的二进制数字转换到五位最大32768的十进制后再显示出来,但串行输出的16位二进制信号在转换成10进制信号的时候不可能一个一个的一一对应,只好通过算法来实现,为此我编了一个程序,但在fitter前总出现error,是一个i/o错误,无法写入.R12文件,不知道是为什么,请高人指点,程序如下: : --假设16位2进制串行信号由低位开始传递 : library ieee; : ................... ☆─────────────────────────────────────☆ frankmore (frankmore) 于 (Mon May 14 15:36:59 2007) 提到: if岂不太烦了,switch case 语句 【 在 Earth 的大作中提到: 】 : 近来在做16位模数转换信号由七位数码管显示的工作,想分两个模块,把16位的二进制数字转换到五位最大32768的十进制后再显示出来,但串行输出的16位二进制信号在转换成10进制信号的时候不可能一个一个的一一对应,只好通过算法来实现,为此我编了一个程序,但在fitter前总出现error,是一个i/o错误,无法写入.R12文件,不知道是为什么,请高人指点,程序如下: : --假设16位2进制串行信号由低位开始传递 : library ieee; : ................... ☆─────────────────────────────────────☆ Now (back) 于 (Mon May 14 16:53:14 2007) 提到: i/o可能就是这个问题,串行的16位数先做一个process放到一个16位的寄存器中,然后再来一个process化整读出不就行了么?程序看的好头大,都不知道你怎么判断16位数的开头。。。。哎,可能自己水平有限嘿嘿~ 【 在 abolide 的大作中提到: 】 : port(clk:in std_logic;--时钟 : cin:in std_logic_vector(0 to 15);--16位的二进制输入信号 : cout:out integer range 0 to 99999);--五位的10进制整数输出信号 : ................... ☆─────────────────────────────────────☆ Now (back) 于 (Mon May 14 19:11:00 2007) 提到: 对了,串行的16位数怎么用16个i/o口呀~难道这样就不用判断16位的起始位么?代价高了点吧~ ☆─────────────────────────────────────☆ wa (wawawa) 于 (Mon May 14 21:17:52 2007) 提到: 【 在 Now 的大作中提到: 】 : 对了,串行的16位数怎么用16个i/o口呀~难道这样就不用判断16位的起始位么?代价高了点吧~ 是啊,那样不就成并行了[em18] ☆─────────────────────────────────────☆ fzylijun886 (北邮人) 于 (Tue May 15 15:40:46 2007) 提到: 我以为是他打错了,这种错误应该到不了适配阶段就报错了吧 【 在 abolide 的大作中提到: 】 : port(clk:in std_logic;--时钟 : cin:in std_logic_vector(0 to 15);--16位的二进制输入信号 : cout:out integer range 0 to 99999);--五位的10进制整数输出信号 : ................... ☆─────────────────────────────────────☆ hjw4444 (blueboy) 于 (Wed May 16 15:38:33 2007) 提到: 为什么不用VERILOG HDL? ☆─────────────────────────────────────☆ Jun (渡良瀬 準) 于 (Wed May 16 16:29:54 2007) 提到: 【 在 hjw4444 的大作中提到: 】 : 为什么不用VERILOG HDL? VERILOG HDL这个似乎只在小规模的或者对门电路的描述是才有优势 ☆─────────────────────────────────────☆ kidd (阿甘) 于 (Wed May 16 23:20:39 2007) 提到: 不仅是麻烦,IF ELSE这样综合出来,是一串级连的电路,延时很大,相应的就是整个电路运行的最高时钟频率低,而CASE综合出来的是并行的电路,延时小的多,整个电路运行的最高时钟频率高 【 在 frankmore 的大作中提到: 】 : if岂不太烦了,switch case 语句 ☆─────────────────────────────────────☆ wzh0001 (wuzhuang) 于 (Wed May 16 23:26:18 2007) 提到: 【 在 kidd 的大作中提到: 】 : 不仅是麻烦,IF ELSE这样综合出来,是一串级连的电路,延时很大,相应的就是整个电路运行的最高时钟频率低,而CASE综合出来的是并行的电路,延时小的多,整个电路运行的最高时钟频率高 先顶,顶完再看!!~~~
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。