我想在 vhdl 中实现一个摩尔斯电码到 ASCII 转换器,然后通过 UART 将该 ASCII 字符传输到 PC 终端。我已经完成了UART部分。
但我不知道如何实现转换器部分。问题在于输入摩尔斯电码的符号率不同。我想检测点、破折号、字符空间和单词空间。
请帮助我进行以下实施:
- 检测具有可变符号率的莫尔斯电码符号
- 二叉搜索树遍历摩尔斯电码树,找到对应的ASCII字符。
我想在 vhdl 中实现一个摩尔斯电码到 ASCII 转换器,然后通过 UART 将该 ASCII 字符传输到 PC 终端。我已经完成了UART部分。
但我不知道如何实现转换器部分。问题在于输入摩尔斯电码的符号率不同。我想检测点、破折号、字符空间和单词空间。
请帮助我进行以下实施:
似乎您打算分两个阶段进行转换器,这听起来是一个不错的想法 - 第一阶段用于解码点、破折号和暂停,第二阶段用于将这些组合成字符。
对于第一阶段,您需要为输入定义一些最小和最大时间 - 也就是说,点/破折号/等可以持续的最短和最长是多少(我认为有一些标准吗? )。
有了这些时序,应该可以使用计数器和边缘检测器来解码输入的莫尔斯信号。
对于第二阶段,您可以创建一个有限状态机,或者甚至只是一个查找表来解码单个字符的输入点和破折号,并将其发送到您的 UART。
您需要创建一个模块来对您的输入进行采样,并从您记录的模式中,使用一些固定模式来输出相应的字母。您需要研究接收信号的宽度以估计您的采样率应该是多少。您可以尝试阅读和理解以下github上的共享代码。https://github.com/altugkarakurt/Morse-Code-Converter这将执行生成莫尔斯电码的相反过程。这可以用作摩尔斯阅读器的测试生成器。从 Morse 检测器中提取的 ASCII 代码可以输入 FIFO,这是一个标准电路并连接到您的 UART。如果 FIFO 未满,Morse 检测器将 ASCII 写入 FIFO,而 UART 从 FIFO 中读取 ASCII 并将其传输到 UART。FIFO 充当缓冲区。如果您需要一些标准的 UART 代码,请查看 Xilinx 网站,其中包含 Microblaze 设计的一个 UART 部分,接口非常简单。