# 可编程机械键盘 **Repository Path**: Voidmatrix/programmable-keyboard ## Basic Information - **Project Name**: 可编程机械键盘 - **Description**: 深度客制化——从逻辑门做起。 - **Primary Language**: Scala - **License**: MIT - **Default Branch**: master - **Homepage**: https://github.com/volatile-static/Keyboard - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2021-02-07 - **Last Updated**: 2021-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 可编程机械键盘 中文 | [English](https://github.com/volatile-static/Keyboard/tree/master/104) ## 介绍 本项目旨在设计一款专为CS和EE发烧友二次开发的高性能、高颜值、高自由度的客制化键盘。 ### 成品效果图 ![counter](https://i.loli.net/2021/02/05/KOF3fBxvHteZkUj.gif) ![matrix](preview.gif) ### 参数 | | | | -------- | --------- | | 按键数量 | 103+1 | | 按键类型 | 3脚机械轴 | | 扫描方式 | 行列式 | | 全键无冲 | 是 | | 灯光 | 73单色+31全彩+锁定键指示灯 | | 接口 | USB+PS/2 | | 最大功率 | 1.35瓦特 | | 主控芯片 | EP4CE6E22C8 | ### 特性 - 完全可编程:仅采用一片`Cyclone IV E`系列FPGA控制全部板载外设,*软硬件协同开发*。 - 完全开源:本仓库仅存放FPGA工程,PCB等资源与其他型号键盘一同存放在百度云,详见[GitHub主页](https://github.com/volatile-static/Keyboard)。 - 全键无冲:矩阵键盘中每一个按键都串联一只二极管,配合PS/2协议实现“真·全键无冲”。 - 全并行LED驱动:**168**路PWM独立计数,通过Avalon-MM总线连接Nios II软核,详见[Wiki](https://gitee.com/const_volatile/programmable-keyboard/wikis/%E6%95%B0%E5%AD%97%E9%80%BB%E8%BE%91%E8%AE%BE%E8%AE%A1?sort_id=3527145)。 - 全并行接口:USB与PS/2接口可同时连接不同电脑,互不干扰,兼顾高性能与兼容性。 ### 涉及的技术 - 晶体管与发光二极管的定量计算 - 矩阵键盘扫描方式的选择 - Altium Designer设计PCB - AutoCAD设计定位板 - Solid Works设计底座 - FPGA最小系统的组成 - PS/2与HID键盘协议 - SpinalHDL与VerilogHDL混合描述 - 片上系统设计 - 嵌入式软件(C语言) ## 仓库结构 本仓库包含以下四个子工程。 | 工程 | 说明 | | ---------------------------------------------- | ------------------------------------------------------------ | | Quartus | 整个项目的出发点和落脚点。[底层代码](VerilogHDL/)采用Verilog语言编写。 | | [SpinalHDL](SpinalHDL/src/main/scala/keyboard) | 使用[开源](https://github.com/SpinalHDL)的高级硬件描述语言编写顶层逻辑。 | | Qsys硬件 | 使用Platform Designer设计的片上可编程系统。(SOPC) | | [Nios软件](Qsys/Software/kbd104) | 采用C语言实现的应用层,运行在Qsys硬件中。 | ## 使用说明 入门请看[wiki](https://gitee.com/const_volatile/programmable-keyboard/wikis)。你可以将本项目中的部分代码移植到你的项目中,也可以按以下步骤使用本项目二次开发。 1. 确保电路硬件无bug 2. 安装好SpinalHDL开发环境并用IDEA打开SpinalHDL文件夹 3. 在IDEA中运行GenerateIP与GenerateTop 4. 打开Quartus,Platform Designer,生成sopcinfo文件 5. 全综合,得到sof文件并下载 6. make软件工程得到ELF 7. 打开Nios Shell,依次执行[命令](Qsys/Software/kbd104/生成固件命令.TXT)得到hex文件 8. 使用[jtag_flash.cof](jtag_flash.cof)转换得到jic文件并烧录