返回信息流☆─────────────────────────────────────☆
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综合出来的是并行的电路,延时小的多,整个电路运行的最高时钟频率高
先顶,顶完再看!!~~~
这是一条镜像帖。来源:北邮人论坛 / circuit / #715同步于 2007/5/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
[合集] 一个关于VHDL的问题
pooh1949
2007/5/20镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。