<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FPGA &#8211; Antonio</title>
	<atom:link href="/category/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%AC%94%E8%AE%B0/fpga/feed/" rel="self" type="application/rss+xml" />
	<link>https://nstar.ltd</link>
	<description></description>
	<lastBuildDate>Mon, 06 Apr 2026 05:05:13 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>FPGA——逻辑分析仪（纯verilog实现）</title>
		<link>/fpga-%e9%80%bb%e8%be%91%e5%88%86%e6%9e%90%e4%bb%aa%ef%bc%88%e7%ba%afverilog%e5%ae%9e%e7%8e%b0%ef%bc%89/</link>
					<comments>/fpga-%e9%80%bb%e8%be%91%e5%88%86%e6%9e%90%e4%bb%aa%ef%bc%88%e7%ba%afverilog%e5%ae%9e%e7%8e%b0%ef%bc%89/#respond</comments>
		
		<dc:creator><![CDATA[Antonio]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 19:02:45 +0000</pubDate>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[嵌入式笔记]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[电子设计]]></category>
		<category><![CDATA[逻辑分析仪]]></category>
		<guid isPermaLink="false">/?p=286</guid>

					<description><![CDATA[引言—— 闲来无事，兴起整个基于FPGA的逻辑分析仪吧，前段时间看到开源的100M采样率的pico逻辑分析仪挺 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>引言——<br>                 闲来无事，兴起整个基于FPGA的逻辑分析仪吧，前段时间看到开源的100M采样率的pico逻辑分析仪挺感兴趣的，但手中暂无pico，那就用手中的NANO 9K FPGA手搓一个。</p>



<p>该项目采用TANG NANO 9K（GW1NR-9）实现，最大采样率为27MHz，采样深度48K。（勉强能用，其实PLL倍频输出下也能达到GW1NR-9的工作频率上限125M）。</p>



<p>移植难度：<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" />             纯verilog</p>



<p>Gitlab代码地址：<a href="https://github.com/pieceofApple/GW1NR-9_Logicanalyzer">pieceofApple/GW1NR-9_Logicanalyzer: 该项目采用TANG NANO 9K（GW1NR-9）实现，最大采样率为27MHz，采样深度48K。</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E6%B3%A8%E6%84%8F%E7%BB%8F%E8%BF%87%E5%A4%9A%E6%AC%A1%E6%B5%8B%E8%AF%95%E5%A6%82%E9%80%9A%E8%BF%87fpga%E6%8E%A5%E6%94%B6rx%E5%86%8D%E8%BF%9E%E6%8E%A5%E8%87%B3rx-ext%E8%BE%93%E5%87%BA%E5%B0%86rx-ext%E8%BF%9E%E6%8E%A5%E8%87%B3%E9%87%87%E6%A0%B7%E9%80%9A%E9%81%93%E6%97%A0%E6%B3%95%E9%87%87%E6%A0%B7%E6%95%B0%E6%8D%AE%E4%BD%86%E5%A4%96%E9%83%A8%E4%B8%B2%E5%8F%A3%E7%9B%B4%E6%8E%A5%E6%8E%A5%E5%88%B0ch%E9%80%9A%E9%81%93%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E9%87%87%E6%A0%B7%E6%95%85%E5%B0%BD%E9%87%8F%E9%81%BF%E5%85%8Dfpga%E5%86%85%E9%83%A8%E8%BE%93%E5%87%BA%E4%BF%A1%E5%8F%B7%E5%88%B0%E9%87%87%E6%A0%B7%E9%80%9A%E9%81%93%E9%87%87%E6%A0%B7">注意：经过多次测试，如通过FPGA接收RX再连接至RX-EXT输出，将RX-EXT连接至采样通道无法采样数据，但外部串口直接接到CH通道可以正常采样。故尽量避免FPGA内部输出信号到采样通道采样！</h2>



<h2 class="wp-block-heading" id="%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0">系统概述</h2>



<h3 class="wp-block-heading" id="%E7%A1%AC%E4%BB%B6%E8%A7%84%E6%A0%BC">硬件规格</h3>



<ul class="wp-block-list">
<li><strong>FPGA</strong>: TANG NANO 9K (GW1NR-LV9QN88PC6/I5)</li>



<li><strong>系统时钟</strong>: 27MHz</li>



<li><strong>采样通道</strong>: 8通道 (CH0-CH7)</li>



<li><strong>缓冲区大小</strong>: 48KB (49152字节)</li>



<li><strong>最大采样率</strong>: 27MHz</li>



<li><strong>通信接口</strong>: UART (115200波特率, 8N1)</li>



<li><strong>默认采样率</strong>: 100kHz</li>
</ul>



<h3 class="wp-block-heading" id="%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7">功能特性</h3>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8通道逻辑信号采样</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 可配置采样率（10kHz &#8211; 27MHz）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8种触发模式（立即、边沿、电平、模式、序列）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 预触发功能（捕获触发前的数据）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 可配置频率输出（用于测试信号生成）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 可配置占空比（0-100%）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 实时波形显示和分析</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 频率和占空比测量</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> PulseView支持（VCD/CSV导出）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E7%A1%AC%E4%BB%B6%E5%BC%95%E8%84%9A%E9%85%8D%E7%BD%AE">硬件引脚配置</h2>



<h3 class="wp-block-heading" id="%E5%BC%95%E8%84%9A%E5%88%86%E9%85%8D%E8%A1%A8">引脚分配表</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">功能</th><th class="has-text-align-left" data-align="left">引脚号</th><th class="has-text-align-left" data-align="left">方向</th><th class="has-text-align-left" data-align="left">电压</th><th class="has-text-align-left" data-align="left">说明</th></tr></thead><tbody><tr><td><strong>系统时钟</strong></td><td>52</td><td>输入</td><td>1.8V</td><td>27MHz系统时钟</td></tr><tr><td><strong>复位信号</strong></td><td>4</td><td>输入</td><td>1.8V</td><td>低电平复位</td></tr><tr><td><strong>UART TX</strong></td><td>17</td><td>输出</td><td>3.3V</td><td>板载Type-C UART发送</td></tr><tr><td><strong>UART RX</strong></td><td>18</td><td>输入</td><td>3.3V</td><td>板载Type-C UART接收</td></tr><tr><td><strong>UART TX_EXT</strong></td><td>33</td><td>输出</td><td>3.3V</td><td>外部UART发送（与TX同步）</td></tr><tr><td><strong>UART RX_EXT</strong></td><td>34</td><td>输出</td><td>3.3V</td><td>RX信号输出（与RX同步）</td></tr><tr><td><strong>CH0</strong></td><td>25</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道0</td></tr><tr><td><strong>CH1</strong></td><td>26</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道1</td></tr><tr><td><strong>CH2</strong></td><td>27</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道2</td></tr><tr><td><strong>CH3</strong></td><td>28</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道3</td></tr><tr><td><strong>CH4</strong></td><td>29</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道4</td></tr><tr><td><strong>CH5</strong></td><td>30</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道5</td></tr><tr><td><strong>CH6</strong></td><td>31</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道6</td></tr><tr><td><strong>CH7</strong></td><td>32</td><td>输入</td><td>3.3V</td><td>逻辑分析仪通道7</td></tr><tr><td><strong>频率输出</strong></td><td>84</td><td>输出</td><td>1.8V</td><td>可调频率输出</td></tr><tr><td><strong>LED状态</strong></td><td>10-13</td><td>输出</td><td>1.8V</td><td>状态指示LED</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="%E5%BC%95%E8%84%9A%E8%AF%B4%E6%98%8E">引脚说明</h3>



<h4 class="wp-block-heading" id="uart%E6%8E%A5%E5%8F%A3">UART接口</h4>



<ul class="wp-block-list">
<li><strong>引脚17 (uart_tx)</strong>: 板载Type-C UART发送，连接到PC</li>



<li><strong>引脚18 (uart_rx)</strong>: 板载Type-C UART接收，接收PC命令</li>



<li><strong>引脚33 (uart_tx_ext)</strong>: 外部UART发送，与引脚17同步输出相同数据</li>



<li><strong>引脚34 (uart_rx_ext)</strong>: RX信号输出，实时输出引脚18的信号（与RX同步）
<ul class="wp-block-list">
<li>可用于示波器测量</li>



<li>可连接到逻辑分析仪输入通道（如CH2）进行采样</li>



<li>支持外部串口设备直接连接进行数据采样</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading" id="%E9%80%BB%E8%BE%91%E5%88%86%E6%9E%90%E4%BB%AA%E8%BE%93%E5%85%A5">逻辑分析仪输入</h4>



<ul class="wp-block-list">
<li><strong>引脚25-32 (CH0-CH7)</strong>: 8个逻辑分析仪输入通道</li>



<li><strong>CH0-CH2 (引脚25-27)</strong>: 无内部上拉，适合采样外部信号（如RX_EXT输出）</li>



<li><strong>CH3-CH7 (引脚28-32)</strong>: 带内部上拉电阻（PULL_MODE=UP）</li>



<li>所有输入引脚配置为3.3V LVCMOS</li>



<li>支持0-3.3V逻辑电平输入</li>
</ul>



<h4 class="wp-block-heading" id="%E7%8A%B6%E6%80%81%E6%8C%87%E7%A4%BAled">状态指示LED</h4>



<ul class="wp-block-list">
<li><strong>LED0 (引脚10)</strong>: 状态指示位0</li>



<li><strong>LED1 (引脚11)</strong>: 状态指示位1</li>



<li><strong>LED2 (引脚13)</strong>: 状态指示位2</li>
</ul>



<p><strong>LED状态编码</strong>：</p>



<ul class="wp-block-list">
<li><code>000</code> (IDLE): 全灭</li>



<li><code>001</code> (CONFIG): LED0亮</li>



<li><code>010</code> (ARM): LED1亮</li>



<li><code>011</code> (SAMPLING): LED0+LED1亮</li>



<li><code>100</code> (READY): LED2亮</li>



<li><code>101</code> (TRANSMIT): LED0+LED2亮</li>



<li><code>110</code> (SET_FREQ): LED1+LED2亮</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="e58a9fe883bde789b9e680a7-1">功能特性</h2>



<h3 class="wp-block-heading" id="1-%E9%87%87%E6%A0%B7%E5%8A%9F%E8%83%BD">1. 采样功能</h3>



<ul class="wp-block-list">
<li><strong>8通道同步采样</strong>: 同时采样8个通道的逻辑信号</li>



<li><strong>可配置采样率</strong>: 10kHz &#8211; 27MHz（通过分频比配置）</li>



<li><strong>48KB缓冲区</strong>: 可存储49152个采样点</li>



<li><strong>自动传输</strong>: 采样完成后自动通过UART发送数据</li>
</ul>



<p><strong>通道配置说明</strong>:</p>



<ul class="wp-block-list">
<li><strong>CH0-CH2 (引脚25-27)</strong>: 无内部上拉电阻，适合采样外部信号源
<ul class="wp-block-list">
<li>推荐用于：外部串口信号（RX_EXT）、频率输出（freq_out）、其他外部数字信号</li>



<li>优点：无上拉电阻干扰，能准确采样外部信号电平</li>
</ul>
</li>



<li><strong>CH3-CH7 (引脚28-32)</strong>: 带内部上拉电阻（PULL_MODE=UP）
<ul class="wp-block-list">
<li>推荐用于：需要上拉的信号、按键输入、开漏输出等</li>



<li>优点：悬空时为高电平，适合需要上拉的场景</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading" id="2-%E8%A7%A6%E5%8F%91%E5%8A%9F%E8%83%BD">2. 触发功能</h3>



<p>支持8种触发模式：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">模式</th><th class="has-text-align-left" data-align="left">代码</th><th class="has-text-align-left" data-align="left">说明</th></tr></thead><tbody><tr><td><strong>立即触发</strong></td><td>0</td><td>无触发条件，立即开始采样</td></tr><tr><td><strong>上升沿触发</strong></td><td>1</td><td>检测到上升沿时触发</td></tr><tr><td><strong>下降沿触发</strong></td><td>2</td><td>检测到下降沿时触发</td></tr><tr><td><strong>双边沿触发</strong></td><td>3</td><td>检测到任意边沿时触发</td></tr><tr><td><strong>高电平触发</strong></td><td>4</td><td>检测到高电平时触发</td></tr><tr><td><strong>低电平触发</strong></td><td>5</td><td>检测到低电平时触发</td></tr><tr><td><strong>模式触发</strong></td><td>6</td><td>数据匹配指定模式时触发</td></tr><tr><td><strong>序列触发</strong></td><td>7</td><td>先匹配模式1，再匹配模式2时触发</td></tr></tbody></table></figure>



<p><strong>触发参数</strong>：</p>



<ul class="wp-block-list">
<li><strong>触发通道掩码</strong>: 选择哪些通道参与触发（8位，1=启用）</li>



<li><strong>触发模式1</strong>: 用于模式触发和序列触发的第一阶段</li>



<li><strong>触发模式2</strong>: 用于序列触发的第二阶段</li>



<li><strong>预触发采样</strong>: 在触发前采样指定数量的样本</li>
</ul>



<h3 class="wp-block-heading" id="3-%E9%A2%91%E7%8E%87%E8%BE%93%E5%87%BA%E5%8A%9F%E8%83%BD">3. 频率输出功能</h3>



<ul class="wp-block-list">
<li><strong>可配置频率</strong>: 1Hz &#8211; 10MHz（通过分频比配置）</li>



<li><strong>可配置占空比</strong>: 0-100%</li>



<li><strong>输出引脚</strong>: 引脚84 (freq_out)</li>
</ul>



<h3 class="wp-block-heading" id="4-%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%8A%9F%E8%83%BD">4. 数据分析功能</h3>



<ul class="wp-block-list">
<li><strong>频率测量</strong>: 自动计算信号频率</li>



<li><strong>占空比测量</strong>: 自动计算信号占空比</li>



<li><strong>波形显示</strong>: 实时显示8通道波形</li>



<li><strong>数据导出</strong>: 支持VCD和CSV格式导出</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="uart%E5%91%BD%E4%BB%A4%E6%A0%BC%E5%BC%8F">UART命令格式</h2>



<h3 class="wp-block-heading" id="%E5%91%BD%E4%BB%A4%E5%88%97%E8%A1%A8">命令列表</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">命令</th><th class="has-text-align-left" data-align="left">代码</th><th class="has-text-align-left" data-align="left">数据长度</th><th class="has-text-align-left" data-align="left">说明</th></tr></thead><tbody><tr><td><strong>CMD_START</strong></td><td>0x01</td><td>0</td><td>开始采样</td></tr><tr><td><strong>CMD_STOP</strong></td><td>0x02</td><td>0</td><td>停止采样</td></tr><tr><td><strong>CMD_SET_FREQ</strong></td><td>0x06</td><td>4字节</td><td>设置频率输出（小端序）</td></tr><tr><td><strong>CMD_SET_SAMPLE_RATE</strong></td><td>0x07</td><td>4字节</td><td>设置采样率（小端序）</td></tr><tr><td><strong>CMD_SET_DUTY</strong></td><td>0x08</td><td>4字节</td><td>设置占空比（小端序）</td></tr><tr><td><strong>CMD_SET_TRIGGER</strong></td><td>0x09</td><td>6字节</td><td>设置触发配置</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="%E5%91%BD%E4%BB%A4%E8%AF%A6%E7%BB%86%E6%A0%BC%E5%BC%8F">命令详细格式</h3>



<h4 class="wp-block-heading" id="cmd_set_freq-0x06---%E8%AE%BE%E7%BD%AE%E9%A2%91%E7%8E%87%E8%BE%93%E5%87%BA">CMD_SET_FREQ (0x06) &#8211; 设置频率输出</h4>



<p><strong>数据格式</strong>: 4字节，小端序（Little-Endian）</p>



<pre class="wp-block-code"><code>&#91;字节0] 分频比低字节
&#91;字节1] 分频比次低字节
&#91;字节2] 分频比次高字节
&#91;字节3] 分频比高字节
</code></pre>



<p><strong>计算公式</strong>:</p>



<ul class="wp-block-list">
<li>分频比 = 27MHz / 目标频率</li>



<li>实际频率 = 27MHz / 分频比</li>
</ul>



<p><strong>示例</strong>: 设置10kHz频率</p>



<ul class="wp-block-list">
<li>分频比 = 27,000,000 / 10,000 = 2700</li>



<li>发送: <code>0x06 0xAC 0x0A 0x00 0x00</code> (2700 = 0x00000AAC)</li>
</ul>



<h4 class="wp-block-heading" id="cmd_set_sample_rate-0x07---%E8%AE%BE%E7%BD%AE%E9%87%87%E6%A0%B7%E7%8E%87">CMD_SET_SAMPLE_RATE (0x07) &#8211; 设置采样率</h4>



<p><strong>数据格式</strong>: 4字节，小端序</p>



<pre class="wp-block-code"><code>&#91;字节0] 分频比低字节
&#91;字节1] 分频比次低字节
&#91;字节2] 分频比次高字节
&#91;字节3] 分频比高字节
</code></pre>



<p><strong>计算公式</strong>:</p>



<ul class="wp-block-list">
<li>分频比 = 27MHz / 目标采样率</li>



<li>实际采样率 = 27MHz / 分频比</li>
</ul>



<p><strong>示例</strong>: 设置1MHz采样率</p>



<ul class="wp-block-list">
<li>分频比 = 27,000,000 / 1,000,000 = 27</li>



<li>发送: <code>0x07 0x1B 0x00 0x00 0x00</code> (27 = 0x0000001B)</li>
</ul>



<h4 class="wp-block-heading" id="cmd_set_duty-0x08---%E8%AE%BE%E7%BD%AE%E5%8D%A0%E7%A9%BA%E6%AF%94">CMD_SET_DUTY (0x08) &#8211; 设置占空比</h4>



<p><strong>数据格式</strong>: 4字节，小端序</p>



<pre class="wp-block-code"><code>&#91;字节0] 高电平周期数低字节
&#91;字节1] 高电平周期数次低字节
&#91;字节2] 高电平周期数次高字节
&#91;字节3] 高电平周期数高字节
</code></pre>



<p><strong>注意</strong>: 必须先设置频率，再设置占空比</p>



<h4 class="wp-block-heading" id="cmd_set_trigger-0x09---%E8%AE%BE%E7%BD%AE%E8%A7%A6%E5%8F%91%E9%85%8D%E7%BD%AE">CMD_SET_TRIGGER (0x09) &#8211; 设置触发配置</h4>



<p><strong>数据格式</strong>: 6字节</p>



<pre class="wp-block-code"><code>&#91;字节0] 触发类型 (0-7)
&#91;字节1] 触发通道掩码 (8位，1=启用该通道)
&#91;字节2] 触发模式1 (用于模式触发和序列触发)
&#91;字节3] 触发模式2 (用于序列触发的第二阶段)
&#91;字节4] 预触发数量低字节
&#91;字节5] 预触发数量高字节
</code></pre>



<p><strong>触发类型</strong>:</p>



<ul class="wp-block-list">
<li><code>0x00</code>: 立即触发</li>



<li><code>0x01</code>: 上升沿触发</li>



<li><code>0x02</code>: 下降沿触发</li>



<li><code>0x03</code>: 双边沿触发</li>



<li><code>0x04</code>: 高电平触发</li>



<li><code>0x05</code>: 低电平触发</li>



<li><code>0x06</code>: 模式触发</li>



<li><code>0x07</code>: 序列触发</li>
</ul>



<p><strong>示例</strong>: 设置上升沿触发（CH0），预触发1000个样本</p>



<ul class="wp-block-list">
<li>发送: <code>0x09 0x01 0x01 0x00 0x00 0xE8 0x03</code>
<ul class="wp-block-list">
<li><code>0x01</code>: 上升沿触发</li>



<li><code>0x01</code>: 仅CH0启用 (0x01 = 00000001)</li>



<li><code>0x00</code>: 触发模式1（不使用）</li>



<li><code>0x00</code>: 触发模式2（不使用）</li>



<li><code>0xE8 0x03</code>: 预触发1000 (0x03E8 = 1000)</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B">快速开始</h2>



<h3 class="wp-block-heading" id="1-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87">1. 环境准备</h3>



<p><strong>硬件要求</strong>:</p>



<ul class="wp-block-list">
<li>TANG NANO 9K FPGA开发板</li>



<li>USB Type-C数据线</li>



<li>待测信号源（可选）</li>
</ul>



<p><strong>软件要求</strong>:</p>



<ul class="wp-block-list">
<li>Python 3.7+</li>



<li>串口驱动（通常自动安装）</li>



<li>matplotlib（用于波形显示）</li>



<li>PulseView（可选，用于高级分析）</li>
</ul>



<p><strong>安装Python依赖</strong>:</p>



<pre class="wp-block-code"><code>pip install pyserial matplotlib
</code></pre>



<h3 class="wp-block-heading" id="2-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8">2. 基本使用</h3>



<p><strong>最简单的使用方式</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11
</code></pre>



<p>这将：</p>



<ol class="wp-block-list">
<li>连接到FPGA（COM11）</li>



<li>使用默认采样率（100kHz）</li>



<li>立即开始采样</li>



<li>自动接收数据</li>



<li>显示波形和分析结果</li>
</ol>



<h3 class="wp-block-heading" id="3-%E5%A4%96%E9%83%A8%E4%B8%B2%E5%8F%A3%E4%BD%BF%E7%94%A8">3. 外部串口使用</h3>



<p><strong>使用外部串口设备进行采样</strong>:</p>



<p>本逻辑分析仪支持通过外部串口设备发送数据，并通过RX_EXT引脚输出，然后连接到逻辑分析仪输入通道进行采样。</p>



<p><strong>连接方式</strong>:</p>



<ol class="wp-block-list">
<li>将外部串口设备的TX连接到FPGA的RX（引脚18）</li>



<li>将FPGA的RX_EXT（引脚34）连接到逻辑分析仪输入通道（如CH2，引脚27）</li>



<li>外部串口设备发送的数据会被FPGA接收，同时通过RX_EXT输出</li>



<li>逻辑分析仪可以采样RX_EXT输出的信号</li>
</ol>



<p><strong>使用示例</strong>:</p>



<pre class="wp-block-code"><code><em># 设置采样率为1MHz，显示采样率为500kHz，占空比0.8，导出CSV</em>
python examples/read_data.py COM11 --sample-rate 1M --display-rate 500k --duty 0.8 --export-csv
</code></pre>



<p><strong>注意事项</strong>:</p>



<ul class="wp-block-list">
<li>确保外部串口设备的波特率与FPGA UART配置一致（115200 bps）</li>



<li>采样率应足够高，建议至少是信号频率的5-10倍</li>



<li>CH0-CH2通道无内部上拉，适合采样外部信号</li>
</ul>



<h3 class="wp-block-heading" id="4-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E7%A4%BA%E4%BE%8B">4. 常用命令示例</h3>



<p><strong>设置采样率为1MHz</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --sample-rate 1M
</code></pre>



<p><strong>上升沿触发（CH0）</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger rising --trigger-mask 0x01
</code></pre>



<p><strong>模式触发（匹配0x55）</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger pattern --trigger-pattern 0x55
</code></pre>



<p><strong>导出为VCD格式（PulseView）</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --export-vcd
</code></pre>



<p><strong>完整示例（采样率+触发+导出）</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --sample-rate 1M --trigger rising --trigger-mask 0x01 --pre-trigger 1000 --export-vcd
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E8%A7%A6%E5%8F%91%E5%8A%9F%E8%83%BD">触发功能</h2>



<h3 class="wp-block-heading" id="%E8%A7%A6%E5%8F%91%E6%A8%A1%E5%BC%8F%E8%AF%A6%E8%A7%A3">触发模式详解</h3>



<h4 class="wp-block-heading" id="1-%E7%AB%8B%E5%8D%B3%E8%A7%A6%E5%8F%91-immediate">1. 立即触发 (immediate)</h4>



<p><strong>说明</strong>: 无触发条件，发送开始命令后立即开始采样</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>需要捕获所有数据</li>



<li>不需要等待特定条件</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger immediate
</code></pre>



<h4 class="wp-block-heading" id="2-%E4%B8%8A%E5%8D%87%E6%B2%BF%E8%A7%A6%E5%8F%91-rising">2. 上升沿触发 (rising)</h4>



<p><strong>说明</strong>: 检测到上升沿（0→1）时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获信号启动时的数据</li>



<li>分析上升沿后的信号变化</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code><em># CH0上升沿触发</em>
python examples/read_data.py COM11 --trigger rising --trigger-mask 0x01

<em># 所有通道上升沿触发</em>
python examples/read_data.py COM11 --trigger rising --trigger-mask 0xFF
</code></pre>



<h4 class="wp-block-heading" id="3-%E4%B8%8B%E9%99%8D%E6%B2%BF%E8%A7%A6%E5%8F%91-falling">3. 下降沿触发 (falling)</h4>



<p><strong>说明</strong>: 检测到下降沿（1→0）时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获信号停止时的数据</li>



<li>分析下降沿后的信号变化</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger falling --trigger-mask 0x01
</code></pre>



<h4 class="wp-block-heading" id="4-%E5%8F%8C%E8%BE%B9%E6%B2%BF%E8%A7%A6%E5%8F%91-both">4. 双边沿触发 (both)</h4>



<p><strong>说明</strong>: 检测到任意边沿（上升或下降）时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获信号变化时的数据</li>



<li>分析边沿前后的信号</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger both --trigger-mask 0x01
</code></pre>



<h4 class="wp-block-heading" id="5-%E9%AB%98%E7%94%B5%E5%B9%B3%E8%A7%A6%E5%8F%91-high">5. 高电平触发 (high)</h4>



<p><strong>说明</strong>: 检测到高电平时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获高电平期间的数据</li>



<li>分析高电平状态</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger high --trigger-mask 0x01
</code></pre>



<h4 class="wp-block-heading" id="6-%E4%BD%8E%E7%94%B5%E5%B9%B3%E8%A7%A6%E5%8F%91-low">6. 低电平触发 (low)</h4>



<p><strong>说明</strong>: 检测到低电平时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获低电平期间的数据</li>



<li>分析低电平状态</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --trigger low --trigger-mask 0x01
</code></pre>



<h4 class="wp-block-heading" id="7-%E6%A8%A1%E5%BC%8F%E8%A7%A6%E5%8F%91-pattern">7. 模式触发 (pattern)</h4>



<p><strong>说明</strong>: 数据匹配指定模式时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获特定数据模式</li>



<li>分析特定数据序列</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code><em># 匹配0x55模式（01010101）</em>
python examples/read_data.py COM11 --trigger pattern --trigger-pattern 0x55

<em># 仅CH0-CH3匹配0x05</em>
python examples/read_data.py COM11 --trigger pattern --trigger-mask 0x0F --trigger-pattern 0x05
</code></pre>



<h4 class="wp-block-heading" id="8-%E5%BA%8F%E5%88%97%E8%A7%A6%E5%8F%91-sequence">8. 序列触发 (sequence)</h4>



<p><strong>说明</strong>: 先匹配模式1，再匹配模式2时触发</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获特定数据序列</li>



<li>分析复杂的数据模式</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code><em># 先匹配0x55，再匹配0xAA</em>
python examples/read_data.py COM11 --trigger sequence --trigger-pattern 0x55 --trigger-pattern2 0xAA
</code></pre>



<h3 class="wp-block-heading" id="%E9%A2%84%E8%A7%A6%E5%8F%91%E5%8A%9F%E8%83%BD">预触发功能</h3>



<p><strong>说明</strong>: 在触发条件满足前，先采样指定数量的样本</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>捕获触发前的数据</li>



<li>分析触发前后的完整波形</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code><em># 上升沿触发，预触发1000个样本</em>
python examples/read_data.py COM11 --trigger rising --pre-trigger 1000
</code></pre>



<p><strong>工作原理</strong>:</p>



<ol class="wp-block-list">
<li>系统进入ARM状态，等待触发</li>



<li>持续采样数据到缓冲区（循环覆盖）</li>



<li>检测到触发条件时，继续采样预触发数量的样本</li>



<li>然后开始正常采样，直到缓冲区满</li>
</ol>



<p><strong>注意事项</strong>:</p>



<ul class="wp-block-list">
<li>预触发数量不能超过缓冲区大小（49152）</li>



<li>建议预触发数量 &lt; 10000，以确保有足够空间存储触发后的数据</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="pulseview%E6%94%AF%E6%8C%81">PulseView支持</h2>



<h3 class="wp-block-heading" id="%E4%BB%80%E4%B9%88%E6%98%AFpulseview">什么是PulseView？</h3>



<p>PulseView是一个开源的逻辑分析仪软件，支持多种硬件和文件格式。本逻辑分析仪支持导出VCD和CSV格式，可以在PulseView中打开和分析。</p>



<h3 class="wp-block-heading" id="%E5%AF%BC%E5%87%BA%E6%A0%BC%E5%BC%8F">导出格式</h3>



<h4 class="wp-block-heading" id="1-vcd%E6%A0%BC%E5%BC%8F-value-change-dump">1. VCD格式 (Value Change Dump)</h4>



<p><strong>特点</strong>:</p>



<ul class="wp-block-list">
<li>标准格式，广泛支持</li>



<li>包含时间信息</li>



<li>适合波形分析</li>
</ul>



<p><strong>导出方法</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --export-vcd
</code></pre>



<p><strong>输出文件</strong>:&nbsp;<code>logic_analyzer_data.vcd</code></p>



<h4 class="wp-block-heading" id="2-csv%E6%A0%BC%E5%BC%8F-comma-separated-values">2. CSV格式 (Comma-Separated Values)</h4>



<p><strong>特点</strong>:</p>



<ul class="wp-block-list">
<li>易于处理和分析</li>



<li>可以用Excel打开</li>



<li>适合数据分析</li>
</ul>



<p><strong>导出方法</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --export-csv
</code></pre>



<p><strong>输出文件</strong>:&nbsp;<code>logic_analyzer_data.csv</code></p>



<h3 class="wp-block-heading" id="%E5%9C%A8pulseview%E4%B8%AD%E6%89%93%E5%BC%80">在PulseView中打开</h3>



<h4 class="wp-block-heading" id="%E6%96%B9%E6%B3%951-%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80vcd%E6%96%87%E4%BB%B6">方法1: 直接打开VCD文件</h4>



<ol class="wp-block-list">
<li>启动PulseView</li>



<li>选择 <code>File</code> → <code>Open</code></li>



<li>选择 <code>logic_analyzer_data.vcd</code></li>



<li>波形将自动加载</li>
</ol>



<h4 class="wp-block-heading" id="%E6%96%B9%E6%B3%952-%E5%AF%BC%E5%85%A5csv%E6%96%87%E4%BB%B6">方法2: 导入CSV文件</h4>



<ol class="wp-block-list">
<li>启动PulseView</li>



<li>选择 <code>File</code> → <code>Import</code></li>



<li>选择 <code>CSV</code> 格式</li>



<li>选择 <code>logic_analyzer_data.csv</code></li>



<li>配置导入参数（采样率、通道数等）</li>
</ol>



<h3 class="wp-block-heading" id="pulseview%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD">PulseView高级功能</h3>



<h4 class="wp-block-heading" id="%E5%8D%8F%E8%AE%AE%E8%A7%A3%E7%A0%81">协议解码</h4>



<p>PulseView支持多种协议解码：</p>



<ul class="wp-block-list">
<li>UART</li>



<li>SPI</li>



<li>I2C</li>



<li>1-Wire</li>



<li>等等</li>
</ul>



<p><strong>使用方法</strong>:</p>



<ol class="wp-block-list">
<li>在PulseView中打开VCD文件</li>



<li>选择信号</li>



<li>右键 → <code>Add Decoder</code> → 选择协议</li>



<li>配置协议参数（波特率、数据位等）</li>
</ol>



<h4 class="wp-block-heading" id="%E6%B5%8B%E9%87%8F%E5%92%8C%E5%88%86%E6%9E%90">测量和分析</h4>



<ul class="wp-block-list">
<li><strong>时间测量</strong>: 测量信号周期、脉宽等</li>



<li><strong>频率分析</strong>: 分析信号频率</li>



<li><strong>统计信息</strong>: 统计高/低电平时间</li>



<li><strong>搜索功能</strong>: 搜索特定模式</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD">高级功能</h2>



<h3 class="wp-block-heading" id="1-%E9%A2%91%E7%8E%87%E8%BE%93%E5%87%BA%E9%85%8D%E7%BD%AE">1. 频率输出配置</h3>



<p><strong>设置频率输出</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --freq 10000
</code></pre>



<p><strong>设置频率和占空比</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --freq 10000 --duty 50
</code></pre>



<p><strong>频率范围</strong>: 1Hz &#8211; 10MHz</p>



<p><strong>占空比范围</strong>: 0-100%</p>



<h3 class="wp-block-heading" id="2-%E9%87%87%E6%A0%B7%E7%8E%87%E9%85%8D%E7%BD%AE">2. 采样率配置</h3>



<p><strong>预设采样率</strong>:</p>



<ul class="wp-block-list">
<li><code>27M</code>: 27MHz（最大）</li>



<li><code>13.5M</code>: 13.5MHz</li>



<li><code>9M</code>: 9MHz</li>



<li><code>6.75M</code>: 6.75MHz</li>



<li><code>5.4M</code>: 5.4MHz</li>



<li><code>1M</code>: 1MHz</li>



<li><code>500k</code>: 500kHz</li>



<li><code>100k</code>: 100kHz（默认）</li>



<li><code>50k</code>: 50kHz</li>



<li><code>10k</code>: 10kHz</li>



<li><code>1k</code>: 1kHz</li>
</ul>



<p><strong>使用示例</strong>:</p>



<pre class="wp-block-code"><code><em># 使用预设值</em>
python examples/read_data.py COM11 --sample-rate 1M

<em># 使用自定义值</em>
python examples/read_data.py COM11 --sample-rate 500000
</code></pre>



<h3 class="wp-block-heading" id="3-%E6%98%BE%E7%A4%BA%E9%87%87%E6%A0%B7%E7%8E%87">3. 显示采样率</h3>



<p><strong>说明</strong>: 用于计算和显示的采样率（不影响FPGA硬件采样率）</p>



<p><strong>使用场景</strong>:</p>



<ul class="wp-block-list">
<li>FPGA采样率与显示采样率不同时</li>



<li>需要调整显示时间轴时</li>
</ul>



<p><strong>示例</strong>:</p>



<pre class="wp-block-code"><code>python examples/read_data.py COM11 --sample-rate 1M --display-rate 500k
</code></pre>



<h3 class="wp-block-heading" id="4-%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%80%89%E9%A1%B9%E5%AE%8C%E6%95%B4%E5%88%97%E8%A1%A8">4. 命令行选项完整列表</h3>



<pre class="wp-block-code"><code>python examples/read_data.py &lt;COM端口&gt; &#91;选项]

选项:
  --no-plot        不显示波形图
  --save           保存原始数据到文件 (.bin)
  --export-vcd     导出为 VCD 格式（PulseView 支持）
  --export-csv     导出为 CSV 格式（PulseView 支持）
  --stop           手动停止采样（否则等待缓冲区满）
  --freq &lt;Hz&gt;      设置频率输出（在采样前）
  --duty &lt;值&gt;      设置占空比（在采样前，需要先设置频率）
  --sample-rate &lt;Hz&gt;   设置FPGA硬件采样率
  --display-rate &lt;Hz&gt;  指定显示用采样率（仅用于计算和显示）
  --trigger &lt;类型&gt;     设置触发类型
  --trigger-mask &lt;值&gt;  触发通道掩码（十六进制）
  --trigger-pattern &lt;值&gt;  触发模式1（十六进制）
  --trigger-pattern2 &lt;值&gt; 触发模式2（十六进制）
  --pre-trigger &lt;数量&gt;   预触发采样数量
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98">常见问题</h2>



<h3 class="wp-block-heading" id="q1-%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0fpga">Q1: 无法连接到FPGA</h3>



<p><strong>可能原因</strong>:</p>



<ol class="wp-block-list">
<li>串口号错误</li>



<li>串口被其他程序占用</li>



<li>USB驱动未安装</li>
</ol>



<p><strong>解决方法</strong>:</p>



<ol class="wp-block-list">
<li>检查设备管理器中的串口号</li>



<li>关闭其他可能占用串口的程序</li>



<li>重新安装USB驱动</li>
</ol>



<h3 class="wp-block-heading" id="q2-%E9%87%87%E6%A0%B7%E6%95%B0%E6%8D%AE%E4%B8%8D%E6%AD%A3%E7%A1%AE">Q2: 采样数据不正确</h3>



<p><strong>可能原因</strong>:</p>



<ol class="wp-block-list">
<li>采样率设置过低</li>



<li>信号频率过高</li>



<li>通道连接问题</li>



<li>通道上拉电阻影响（CH3-CH7有上拉，CH0-CH2无上拉）</li>
</ol>



<p><strong>解决方法</strong>:</p>



<ol class="wp-block-list">
<li>提高采样率（至少是信号频率的5-10倍）</li>



<li>检查信号连接</li>



<li>使用示波器验证信号</li>



<li>对于外部信号采样，建议使用CH0-CH2（无上拉电阻）</li>



<li>对于需要上拉的信号，使用CH3-CH7</li>
</ol>



<h3 class="wp-block-heading" id="q3-%E8%A7%A6%E5%8F%91%E5%8A%9F%E8%83%BD%E4%B8%8D%E5%B7%A5%E4%BD%9C">Q3: 触发功能不工作</h3>



<p><strong>可能原因</strong>:</p>



<ol class="wp-block-list">
<li>触发条件不满足</li>



<li>触发通道掩码设置错误</li>



<li>信号状态不符合触发条件</li>
</ol>



<p><strong>解决方法</strong>:</p>



<ol class="wp-block-list">
<li>检查信号状态是否满足触发条件</li>



<li>确认触发通道掩码正确</li>



<li>使用立即触发模式测试</li>
</ol>



<h3 class="wp-block-heading" id="q4-%E9%A2%91%E7%8E%87%E6%B5%8B%E9%87%8F%E4%B8%8D%E5%87%86%E7%A1%AE">Q4: 频率测量不准确</h3>



<p><strong>可能原因</strong>:</p>



<ol class="wp-block-list">
<li>采样率设置不正确</li>



<li>信号边沿不够清晰</li>



<li>信号频率过高</li>
</ol>



<p><strong>解决方法</strong>:</p>



<ol class="wp-block-list">
<li>确保采样率至少是信号频率的10倍</li>



<li>检查信号质量</li>



<li>使用更高的采样率</li>
</ol>



<h3 class="wp-block-heading" id="q5-pulseview%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80vcd%E6%96%87%E4%BB%B6">Q5: PulseView无法打开VCD文件</h3>



<p><strong>可能原因</strong>:</p>



<ol class="wp-block-list">
<li>文件格式错误</li>



<li>PulseView版本过旧</li>



<li>文件损坏</li>
</ol>



<p><strong>解决方法</strong>:</p>



<ol class="wp-block-list">
<li>重新导出VCD文件</li>



<li>更新PulseView到最新版本</li>



<li>检查文件是否完整</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E6%8A%80%E6%9C%AF%E8%A7%84%E6%A0%BC">技术规格</h2>



<h3 class="wp-block-heading" id="%E6%80%A7%E8%83%BD%E5%8F%82%E6%95%B0">性能参数</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">参数</th><th class="has-text-align-left" data-align="left">规格</th></tr></thead><tbody><tr><td><strong>最大采样率</strong></td><td>27MHz</td></tr><tr><td><strong>最小采样率</strong></td><td>~1kHz</td></tr><tr><td><strong>采样深度</strong></td><td>49152样本/通道</td></tr><tr><td><strong>通道数</strong></td><td>8通道</td></tr><tr><td><strong>输入电压范围</strong></td><td>0-3.3V</td></tr><tr><td><strong>输入逻辑电平</strong></td><td>LVCMOS 3.3V</td></tr><tr><td><strong>通信波特率</strong></td><td>115200 bps</td></tr><tr><td><strong>缓冲区大小</strong></td><td>48KB</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="%E8%B5%84%E6%BA%90%E4%BD%BF%E7%94%A8">资源使用</h3>



<ul class="wp-block-list">
<li><strong>BRAM</strong>: ~48KB (用于数据缓冲区)</li>



<li><strong>LUT</strong>: 根据配置变化</li>



<li><strong>FF</strong>: 根据配置变化</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97">更新日志</h2>



<h3 class="wp-block-heading" id="v10-%E5%BD%93%E5%89%8D%E7%89%88%E6%9C%AC">v1.0 (当前版本)</h3>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8通道逻辑分析仪</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 可配置采样率（10kHz &#8211; 27MHz）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8种触发模式</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 预触发功能</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 频率输出和占空比配置</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> PulseView支持（VCD/CSV导出）</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> RX/RX_EXT同步输出</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 外部串口数据采样支持</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> CH0-CH2无上拉配置，适合外部信号采样</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 已验证外部串口数据采样功能正常</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E8%AE%B8%E5%8F%AF%E8%AF%81">许可证</h2>



<p>本项目采用开源许可证，详见LICENSE文件。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F">联系方式</h2>



<p>如有问题或建议，请提交Issue或Pull Request。</p>
]]></content:encoded>
					
					<wfw:commentRss>/fpga-%e9%80%bb%e8%be%91%e5%88%86%e6%9e%90%e4%bb%aa%ef%bc%88%e7%ba%afverilog%e5%ae%9e%e7%8e%b0%ef%bc%89/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>FPGA-SOPC集成系统</title>
		<link>/fpga-sopc%e9%9b%86%e6%88%90%e7%b3%bb%e7%bb%9f/</link>
					<comments>/fpga-sopc%e9%9b%86%e6%88%90%e7%b3%bb%e7%bb%9f/#respond</comments>
		
		<dc:creator><![CDATA[Antonio]]></dc:creator>
		<pubDate>Fri, 06 Dec 2024 04:57:43 +0000</pubDate>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[嵌入式笔记]]></category>
		<guid isPermaLink="false">/?p=312</guid>

					<description><![CDATA[FPGA-SOPC 项目说明（LoongArch 1C102） 项目类型：FPGA / SoC / 嵌入式系统 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">FPGA-SOPC 项目说明（LoongArch 1C102）</h1>



<figure class="wp-block-image size-large"><img decoding="async" src="https://chevereto.nstar.ltd/images/2026/04/06/--.jpg" alt=""/></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>项目类型：FPGA / SoC / 嵌入式系统 / 上位机开发<br>关键词：LoongArch、Gowin FPGA、AXI/APB、Verilog、Qt、串口通信</p>
</blockquote>



<h2 class="wp-block-heading">项目概述</h2>



<p>本项目面向 2024 集创赛（龙芯中科杯）场景，包含两个协同仓库：</p>



<ol class="wp-block-list">
<li><strong>FPGA-SOPC 硬件工程</strong>：<code>LoongArch-1C102</code></li>



<li><strong>Qt 串口上位机工程</strong>：<code>QT-</code></li>
</ol>



<p>项目目标是构建一套可运行的软硬件一体化系统，形成“片上计算 + 外设控制 + 主机交互”的完整闭环。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">系统架构</h2>



<p>整体采用“处理器子系统 + 片上总线 + 外设子系统 + 上位机工具”的分层结构：</p>



<ul class="wp-block-list">
<li><strong>处理器/顶层集成层</strong>：基于 LoongArch 相关 MCU/SOPC 顶层进行系统组装；</li>



<li><strong>互连层</strong>：采用 AXI/APB 组织主从设备访问关系；</li>



<li><strong>外设层</strong>：集成 GPIO、I2C、UART、视频链路、输入交互等模块；</li>



<li><strong>应用交互层</strong>：通过 Qt 上位机完成串口通信、参数管理与状态显示。</li>
</ul>



<p>该架构具备较好的工程可维护性，便于按层定位问题并扩展功能模块。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">硬件工程说明（LoongArch-1C102）</h2>



<p>硬件仓库以 Gowin FPGA 工程组织，包含工程文件、约束文件、RTL 模块、IP 生成文件与实现目录。<br>从目录和模块命名可识别的主要内容如下：</p>



<ul class="wp-block-list">
<li><strong>顶层与系统模块</strong>：<code>godson_mcu_top</code>、<code>godson_mcu_cpu</code>、测试平台等；</li>



<li><strong>总线与桥接模块</strong>：AXI 与 APB 相关互连、桥接和复用逻辑；</li>



<li><strong>基础外设模块</strong>：GPIO、I2C、定时类模块、配置寄存器；</li>



<li><strong>多媒体与存储模块</strong>：VGA、SDRAM 控制、SD 相关逻辑、UART 接收链路；</li>



<li><strong>交互扩展模块</strong>：键盘扫描与游戏相关外设逻辑；</li>



<li><strong>工程支撑内容</strong>：PLL/FIFO/存储类 IP、器件约束与综合实现产物。</li>
</ul>



<p>该工程形态符合竞赛和原型验证场景中常见的 SoC 组织方式，可用于后续功能裁剪与模块复用。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">上位机工程说明（QT-）</h2>



<p>上位机仓库用于实现串口通信侧的人机交互能力，主要定位为：</p>



<ul class="wp-block-list">
<li>串口连接与参数配置；</li>



<li>数据收发与状态回显；</li>



<li>联调阶段的交互验证与问题复现支持。</li>
</ul>



<p>工程文件以 Qt/qmake 形式提供，适合与 FPGA 端协议共同调试，构成完整的系统验证链路。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">项目技术要点</h2>



<ul class="wp-block-list">
<li><strong>软硬件协同</strong>：通过统一串口交互链路连接 FPGA 系统与 PC 端工具；</li>



<li><strong>分层设计</strong>：按“总线-外设-交互”组织模块，降低联调复杂度；</li>



<li><strong>工程化实现</strong>：包含约束、IP、综合与实现流程，具备可复现性；</li>



<li><strong>可扩展性</strong>：外设接口标准化，便于新增功能模块与上位机指令集。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">技术栈</h2>



<ul class="wp-block-list">
<li><strong>硬件/底层</strong>：Verilog、AMBA（AXI/APB）、时序与约束、FPGA 实现流程</li>



<li><strong>工具链</strong>：Gowin 工程体系（综合/实现/IP）</li>



<li><strong>上位机</strong>：Qt（qmake）、串口通信、调试交互</li>



<li><strong>工程方法</strong>：模块化设计、分层联调、问题定位与复盘</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">仓库地址</h2>



<ul class="wp-block-list">
<li>FPGA-SOPC：<a href="https://github.com/pieceofApple/LoongArch-1C102">https://github.com/pieceofApple/LoongArch-1C102</a></li>



<li>Qt 上位机：<a href="https://github.com/pieceofApple/QT-">https://github.com/pieceofApple/QT-</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>/fpga-sopc%e9%9b%86%e6%88%90%e7%b3%bb%e7%bb%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
