哪位高手帮我注释一下VHDL的程序,由心的万分感谢了

哪位高手帮我注释一下VHDL的程序,由心的万分感谢了,第1张

LIBRARY IEEE;

USE IEEESTD_LOGIC_1164ALL;

USE IEEEstd_logic_arithall;

USE IEEEstd_logic_unsignedall; ---调用常用的库

ENTITY add8b IS

PORT(

clk:IN STD_LOGIC; ---时钟信号

cin: IN STD_LOGIC; ---相加进位信号

a,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-----两个8位的二进制数

s:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ----输出

cout:OUT STD_LOGIC);

END;

ARCHITECTURE cheng OF add8b IS

SIGNAL adda1,adda2,addb1,addb2,reg1a,reg1b,add1,add2:STD_LOGIC_VECTOR(4 DOWNTO 0);

SIGNAL reg2:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL cin1:STD_LOGIC;

BEGIN

PROCESS(clk)

BEGIN

IF clk'EVENT AND clk='1' THEN

adda1<='0'&a(3 DOWNTO 0); ----adda1是a的低4位

addb1<='0'&b(3 DOWNTO 0);-----addb1是b的低4位

adda2<='0'&a(7 DOWNTO 4);------adda2是a的高4位

addb2<='0'&b(7 DOWNTO 4);------addb2是b的高4位

cin1<=cin;

END IF;

END PROCESS;

PROCESS(CLK)

BEGIN

IF clk'EVENT AND clk='1' THEN

add1<=adda1+addb1+cin1; ---低4位相加放入add1 注意考虑是否有进位

reg1a<=adda2;

reg1b<=addb2;

END IF;

END PROCESS;

PROCESS(CLK)

BEGIN

IF clk'EVENT AND clk='1' THEN----高4位相加,考虑低4位相加的进位

add2<=reg1a+reg1b+add1(4);

reg2<=add1(3 DOWNTO 0);

END IF;

END PROCESS;

s<=add2(3 DOWNTO 0)&add1(3 DOWNTO 0);----结果是高四位与低四位并置

cout<=add2(4); ---是否有进位

END cheng ;

第二个 只需要搞清 二进制数的乘法原理就可以了 两个4位二进制数相乘,如a=1010,b=1111 那么可以看成是1010(1000+0100+0010+0001),结果等于 将1010左移三位加上1010左移两位,加上1010左移1位加上1010不移位

就是结果

y<=("0000"& c0)+("000"& c1&'0')+("00"& c2&"00")+('0'&c3&"000");

第一个是不移动 第二个是b低二位与a相乘左移1位 第三是b低3位 与a相乘左移两位,第四是b最高位与a相乘左移三位 结果相加

VHDL不允许在一个进程中检测多个信号的边沿,只能检测某一个信号的边沿。if clk'event and clk='1'then if PUSH_IN'EVENT AND PUSH_IN='0' THEN 这种描述方式VHDL不认可。

carry(0)<=clk;

U0:counter10 PORT MAP(carry(0),count,carry(1),q0);

U1:counter10 PORT MAP(carry(1),count,carry(2),q1);

U2:counter6 PORT MAP(carry(2),count,carry(3),q2);

U3:counter10 PORT MAP(carry(3),count,carry(4),q3);

ledscanclk<=clktemp(5);

PROCESS(ledscanclk)--ledscanclk为扫描时钟

BEGIN

IF(ledscanclk'EVENT AND ledscanclk='1')THEN

CASE showwhat IS

WHEN 0=>shownumber<=CONV_INTEGER(q0);

showwhat<=1;

flag<='0';

WHEN 1=>shownumber<=CONV_INTEGER(q1);

showwhat<=2;

flag<='1';

WHEN 2=>shownumber<=CONV_INTEGER(q2);

showwhat<=3;

flag<='0';

WHEN OTHERS=>shownumber<=CONV_INTEGER(q3);

showwhat<=0;

flag<='1';

END CASE;

END IF;

END PROCESS;

WITH showwhat SELECT --具体要看你的数码管是共阴还是共阳的

scanshow<=B"1110" WHEN 1,--0

B"1101" WHEN 2,--1

B"1011" WHEN 3,--2

B"0111" WHEN OTHERS;--3

WITH shownumber SELECT --具体要看你的数码管是共阴还是共阳的

qtemp<=B"1111110" WHEN 0,--0

B"0110000" WHEN 1,--1

B"1101101" WHEN 2,--2

B"1111001" WHEN 3,--3

B"0110011" WHEN 4,--4

B"1011011" WHEN 5,--5

B"1011111" WHEN 6,--6

B"1110000" WHEN 7,--7

B"1111111" WHEN 8,--8

B"1111011" WHEN OTHERS;--9

show<=flag&qtemp; --show为输出

个人建议,像这样的代码还是自己写为好,这毕竟看完书学习完后是不难的,如果什么都要去问别人,不静下心来考虑,那你永远也无法成为一个高手(虽然我还不是),大家都是在学习,别人能懂的,相信我们也能明白的。我们没有理由比别人会差的,和大家一起加油努力。

--试试这个吧:

LIBRARY IEEE;

USE IEEESTD_LOGIC_1164ALL;

ENTITY Light IS

PORT (CLK,S:IN STD_LOGIC; --CLK选4Hz,或选择其他频率再通过分频产生4Hz

LOUT:OUT STD_LOGIC);--LOUT为输出,用于控制灯的闪灭

END Light;

ARCHITECTRRE bhv OF Light IS

BEGIN

LOUT<=CLK WHEN S='1' ELSE '0’;

END bhv;

VGA时序信号是图象显示的关键,行场扫描时序的产生,是利用逻辑编程的方法实现的,即用VHDL编写分频器,计时器模块,来获得T1、T2、T3、T4 时序。当输出数字、彩条信号和棋盘格图象时,由外部12M有源晶振提供时钟输入,其中行频HS:12MHZ ÷13÷29=31830Hz、场频VS:31830Hz÷480×093=6167Hz、T1=1/31830Hz×4/29=2596us、 T2=1/31830Hz×5/29=604us、T3为两个行周期(T1+T2),T4为480个行周期。

图象信号包括数字、彩条、棋盘格,和ROM中定制的图形等。数字信号和彩条信号的产生是按行场方向将屏幕各进行8等分,相当于一个8×8的点阵,在对应位置显示相应颜色即可获得所需图像信号;棋盘格信号是将横彩条和竖彩条相异或获得。ROM中定制的较为复杂的彩色图像,需采用像素点输出,即将图像各像素点的信息存储于ROM中,再以一定的频率输出。FPGA器件ROM的定制有两种方法:第一种方法是利用FPGA器件的嵌入式存储器定制LPM_ROM, 用MIF文件或HEX文件对其进行初始化,这种方法获得的ROM最大寻址空间为2 12,可以存储一幅分辨率为64×64的图像信息;第二种方法是在FPGA逻辑资源的限度内用VHDL语言定制一个ROM,采用CASE语句对其进行初始化,这种方法获得的ROM在存储深度较大时,编译时对时间的开销较大。ROM初始化完成后,在25MHz的时钟频率下输出存储的图像信息。其图象颜色种类的多少取决于存储空间的大小。

ROM定制的图象信息是利用FPGA嵌入的存储器定制LPM_ROM,可以用于存储一幅64×64分辨率的图像信息,数据线宽为3位,地址线12根,采用组合寻址方式,即行地址HSADDRESS占低6位,场地址VSADDRESS占高6位;若要显示更为复杂的图象信息,只需扩展存储器及寻址的数据线宽度,为了保证行地址信号输出与行扫描信号输出同步,场地址信号输出与场扫描信号输出同步,在VHDL编程时,可用25MHz时钟作为进程的启动信号。输出信号的时序波形如图6所示。各种图象信号的输出是由数据选择器通过VHDL编程实现的。

以上就是关于哪位高手帮我注释一下VHDL的程序,由心的万分感谢了全部的内容,包括:哪位高手帮我注释一下VHDL的程序,由心的万分感谢了、VHDL 脉冲检测程序设计、谁会用vhdl写一个用四位八段数码管动态显示四位数字的程序啊用clk时钟触发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10212960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存