当前位置:首页 > 消费电子 > 消费电子
[导读] 作为一个菜鸟我很愿意分享下我做的一些小东西,记得一年前好像少几天吧,看记录是2009年5月19日我用51单片机做数字钟的情景,那个时候用汇编,焦头烂额,做了三天,还请教了老师。哎,现在都已经用C了,而且重心已经

 作为一个菜鸟我很愿意分享下我做的一些小东西,记得一年前好像少几天吧,看记录是2009年5月19日

我用51单片机做数字钟的情景,那个时候用汇编,焦头烂额,做了三天,还请教了老师。

哎,现在都已经用C了,而且重心已经放在了AVR上,

不过想想,这一年我还是学了很多东西,至少不是虚度了这一年。

FPGA是挺好玩的,不过没有时间搞,忙着比赛。

不过凭借着学期前两个礼拜实习天天晚上去图书馆自学VHDL的基础,加上单片机的基础,一直活到现在。呵呵呵

臭屁一下,今天老师说我可以做他的助教,确实把我兴奋了一把,

其实我一直很心虚,因为都没有时间搞,哪天出个难题答不上来就糗了。

今天中午和下午花了6个小时左右的时间做了一个数字钟,

VHDL语言(Very high speed integrated circuit Hardware Description Language)即超高速集成电路硬件描述语言。

顾名思义既然是硬件描述,当然是描述硬件,这个语言相当于在FPGA或CPLD芯片里熔出一个数字电路。

硬件FPGA 芯片是ALTERA公司Cyclone II 系列的EP2C35F672C6

使用的是ALTERA公司的开发板,型号DE2来张全图,软件为Quartus II 8.0,、ALTERA公司为自己产品打造的开发软件。

<center>

据说是5000块钱,因为是学校教学用,批量买,2500块钱(不过我看下,就芯片贵,我看这个板子人家至少赚了1000多),我原来以为老师不会借,不过他似乎不介意,倒是他主动借给我的,额。。。

不费话了,贴程序吧

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity fpq is

port(clk : in std_logic;

k : in std_logic;

k1 : in std_logic;

k2 : in std_logic;

ge : out std_logic_vector(0 to 6);

shi : out std_logic_vector(0 to 6);

feng : out std_logic_vector(0 to 6);

fens : out std_logic_vector(0 to 6);

shig : out std_logic_vector(0 to 6);

shis : out std_logic_vector(0 to 6));

end fpq;

architecture first of fpq is

signal clock : integer range 0 to 24999999;

signal ge_t : integer range 0 to 9;

signal shi_t : integer range 0 to 5;

signal feng_t : integer range 0 to 9;

signal fens_t : integer range 0 to 5;

signal shig_t : integer range 0 to 9;

signal shis_t : integer range 0 to 2;

signal temp : integer range 0 to 9;

begin

t0: process(clk)

begin

if (clk'event and clk='1') then

clock <= clock + 1;

if clock = 24999999 then

---------------------------------------------

if k='0' then

---------------------------------------------

if ge_t = 9 then

ge_t <= 0;

if shi_t = 5 and ge_t = 9 then

shi_t <= 0;

if feng_t = 9 and shi_t = 5 then

feng_t <= 0;

if fens_t = 5 and feng_t = 9 then

fens_t <= 0;

if shis_t = 2 and shig_t = 3 and fens_t = 5 then

shig_t <= 0;

if shis_t = 2 and shig_t = 3 then

shis_t <= 0;

else

shis_t <= shis_t + 1;

end if;

else

if shig_t = 9 and fens_t = 5 then

shig_t <= 0;

else

shig_t <= shig_t +1;

end if;

end if;

else

fens_t <= fens_t + 1;

end if;

else

feng_t <= feng_t + 1;

end if;

else

shi_t <= shi_t + 1;

end if;

else

ge_t <= ge_t + 1;

end if;

else

if k1='0' then

if feng_t = 9 then

feng_t <= 0;

if fens_t = 5 then

fens_t <= 0;

else

fens_t <= fens_t + 1;

end if;

else

feng_t <= feng_t + 1;

end if;

end if;

if k2='0' then

if shig_t = 3 and shis_t = 2 then

shig_t <= 0;

shis_t <= 0;

else

if shig_t = 9 then

shig_t <= 0;

if shis_t = 2 then

shis_t <= 0;

else

shis_t <= shis_t + 1;

end if;

else

shig_t <= shig_t + 1;

end if;

end if;

end if;

end if;

------------------------------------------------

end if;

end if;

------------------------------------------------

end process t0;

c: process(clk,ge_t,shi_t,feng_t,fens_t,shig_t,shis_t)

begin

case ge_t is

when 9 => ge <= "0000100";

when 8 => ge <= "0000000";

when 7 => ge <= "0001111";

when 6 => ge <= "0100000";

when 5 => ge <= "0100100";

when 4 => ge <= "1001100";

when 3 => ge <= "0000110";

when 2 => ge <= "0010010";

when 1 => ge <= "1001111";

when 0 => ge <= "0000001";

end case;

case shi_t is

when 5 => shi <= "0100100";

when 4 => shi <= "1001100";

when 3 => shi <= "0000110";

when 2 => shi <= "0010010";

when 1 => shi <= "1001111";

when 0 => shi <= "0000001";

end case;

case feng_t is

when 9 => feng <= "0000100";

when 8 => feng <= "0000000";

when 7 => feng <= "0001111";

when 6 => feng <= "0100000";

when 5 => feng <= "0100100";

when 4 => feng <= "1001100";

when 3 => feng <= "0000110";

when 2 => feng <= "0010010";

when 1 => feng <= "1001111";

when 0 => feng <= "0000001";

end case;

case fens_t is

when 5 => fens <= "0100100";

when 4 => fens <= "1001100";

when 3 => fens <= "0000110";

when 2 => fens <= "0010010";

when 1 => fens <= "1001111";

when 0 => fens <= "0000001";

end case;

case shig_t is

when 9 => shig <= "0000100";

when 8 => shig <= "0000000";

when 7 => shig <= "0001111";

when 6 => shig <= "0100000";

when 5 => shig <= "0100100";

when 4 => shig <= "1001100";

when 3 => shig <= "0000110";

when 2 => shig <= "0010010";

when 1 => shig <= "1001111";

when 0 => shig <= "0000001";

end case;

case shis_t is

when 2 => shis <= "0010010";

when 1 => shis <= "1001111";

when 0 => shis <= "0000001";

end case;

end process c;

end first;

和汇编有的一拼啊,呵呵,由于是新手,所以很多程序都带有单片机的想法,其实VHDL和C、FPGA和单片机是两种不同的语言、芯片,主要是要有并行思想和状态机的概念,很遗憾我现在好像都没有。

设置模式开关是sw01.、分钟设置按钮key01、key02 。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在数字化浪潮席卷全球的今天,FPGA技术正成为驱动创新的核心引擎。2025年8月21日,深圳将迎来一场聚焦FPGA技术与产业应用的盛会——2025安路科技FPGA技术沙龙。本次沙龙以“定制未来 共建生态”为主题,汇聚行业...

关键字: FPGA 核心板 开发板

在现代电子系统中,现场可编程门阵列(FPGA)凭借其开发时间短、成本效益高以及灵活的现场重配置与升级等诸多优点,被广泛应用于各种产品领域。从通信设备到工业控制,从汽车电子到航空航天,FPGA 的身影无处不在。为了充分发挥...

关键字: 可编程门阵列 FPGA 数字电源

2025年8月4日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起开售Altera®的Agilex™ 3 FPGA C系列开发套件。此开...

关键字: FPGA 边缘计算 嵌入式应用

完全无人化 —— 定义未来金标标准的100%自动化诊断系统 CURECA™ 将于7月28日至31日在芝加哥首次亮相。 实现全球诊断数据的统 —— 设立大数据平台 S...

关键字: GEN 自动化 无人值守 SE

内窥镜泛指经自然腔道或人工孔道进入体内,并对体内器官或结构进行直接观察和对疾病进行诊断的医疗设备,一般由光学镜头、冷光源、光导纤维、图像传感器以及机械装置等构成。文章介绍了一款基于两片图像传感器和FPGA组成的微型3D内...

关键字: 微创 3D内窥镜 OV6946 FPGA

运用单片机和FPGA芯片作为主控制器件 , 单片机接收从PC机上传过来的显示内容和显示控制命令 , 通过命令解释和数据转换 , 生成LED显示屏所需要的数据信号和同步的控制信号— 数据、时钟、行同步和面同步 。FPGA芯...

关键字: 单片机 FPGA LED显示屏

在异构计算系统中,ARM与FPGA的协同工作已成为高性能计算的关键架构。本文基于FSPI(Fast Serial Peripheral Interface)四线模式,在150MHz时钟频率下实现10.5MB/s的可靠数据...

关键字: ARM FPGA FSPI

厦门 2025年7月3日 /美通社/ -- 厦门市华师希平双语学校在三年办学历程中取得积极进展,教育教学工作呈现良好态势。 教育教学稳步推进 中考表现:2024年首届中考总均分在全市表现良好;2025届地...

关键字: BSP 人工智能 AI SE

在全球FPGA市场被Xilinx(AMD)与Intel垄断的格局下,国产FPGA厂商高云半导体通过构建自主IP核生态与智能时序约束引擎,走出差异化高端化路径。本文深入解析高云半导体FPGA工具链的两大核心技术——全栈IP...

关键字: FPGA 高云半导体

2025年6月12日,由安路科技主办的2025 FPGA技术沙龙在南京正式召开,深圳市米尔电子有限公司(简称:米尔电子)作为国产FPGA的代表企业出席此次活动。米尔电子发表演讲,并展出米尔基于安路飞龙派的核心板和解决方案...

关键字: FPGA 核心板 开发板
关闭