一般来说,如果是FPGA公司的开发环境软件(QUARTUS,ISE等),都是自带多行注释功能的,左键选中多行,右键里就有这个选项。
如果你用的是其他文本编辑软件,就要看了,WIN下的文本编辑器是没这功能的,LINUX下GEDIT这种也是没有这个功能的,LINUX下推荐VIM,不仅有这个功能,还能自设热键。
LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL
USE IEEE.std_logic_arith.all
USE IEEE.std_logic_unsigned.all---调用常用的库
ENTITY add8b IS
PORT(
clk: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相乘左移三位 结果相加
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)