这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3l_fpga_5 [2020/11/18 18:07] zgf |
icore3l_fpga_5 [2022/03/19 15:26] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-11-18 | zgf | 初次建立 | | | V1.0 | 2020-11-18 | zgf | 初次建立 | | ||
行 66: | 行 65: | ||
|< = |小于等于 |2 |a <= b| | |< = |小于等于 |2 |a <= b| | ||
|>= |大于等于 |2 |a >= b| | |>= |大于等于 |2 |a >= b| | ||
+ | |||
* 在进行关系运算时,如果表达式的两个操作数之间的关系时正确的,则运行结果为1(真),否则,运行结果为0(假);如果表达式中的某个操作数为不定值(x和z),则运行结果为x。 | * 在进行关系运算时,如果表达式的两个操作数之间的关系时正确的,则运行结果为1(真),否则,运行结果为0(假);如果表达式中的某个操作数为不定值(x和z),则运行结果为x。 | ||
=== 4、条件运算符 === | === 4、条件运算符 === | ||
行 77: | 行 77: | ||
* 按位运算是两个操作数按照对应位进行“与”、“或”、“非”等逻辑操作,常用的按位运算符有5种,如表5-5所示。 | * 按位运算是两个操作数按照对应位进行“与”、“或”、“非”等逻辑操作,常用的按位运算符有5种,如表5-5所示。 | ||
* 表5-5 按位运算符 | * 表5-5 按位运算符 | ||
+ | |||
|操作符 |执行的操作 |操作数个数 |表达式| | |操作符 |执行的操作 |操作数个数 |表达式| | ||
- | |~ |按位求反 |1 |~a| | + | |~ |按位求反 |1 |''~a''| |
- | |& |按位与 |2 |a & b| | + | |& |按位与 |2 |''a & b''| |
- | |''|'' |按位或 |2 |''a | b''| | + | |''|'' |按位或 |2 |''a | b''| |
- | |^ |按位异或 |2 |a ^ b| | + | |''^'' |按位异或 |2 |''a ^ b''| |
- | |~^,^~ |按位同或 |2 |a ~^ b,a ^~ b| | + | |''~^,^~'' |按位同或 |2 |''a ~^ b,a ^~ b''| |
* 在按位运算中,若两个操作数的位宽不一致,则会自动将两个操作数右对齐,高位补0后进行运算。 | * 在按位运算中,若两个操作数的位宽不一致,则会自动将两个操作数右对齐,高位补0后进行运算。 | ||
=== 6、拼接运算符 === | === 6、拼接运算符 === | ||
* 拼接运算是将两个或多个操作数的某些位拼接起来得到一个新数据的表达式,其运算符号为“{}”,被拼接的操作数用“,”隔开,其表达式如下: | * 拼接运算是将两个或多个操作数的某些位拼接起来得到一个新数据的表达式,其运算符号为“{}”,被拼接的操作数用“,”隔开,其表达式如下: | ||
+ | <code verilog> | ||
{signal1,signal2} | {signal1,signal2} | ||
+ | </code> | ||
=== 7、移位运算符 === | === 7、移位运算符 === | ||
行 95: | 行 99: | ||
|>> |右移 |2 |a >> m,a为操作数,m为移的位数| | |>> |右移 |2 |a >> m,a为操作数,m为移的位数| | ||
|<< |左移 |2 |a << m,a为操作数,m为移的位数| | |<< |左移 |2 |a << m,a为操作数,m为移的位数| | ||
+ | |||
=== 8、等式运算符 === | === 8、等式运算符 === | ||
* 在Verilog HDL中有四种等式运算符,如表5-7所示。 | * 在Verilog HDL中有四种等式运算符,如表5-7所示。 | ||
行 104: | 行 109: | ||
|=== |等于 |2 |a === b| | |=== |等于 |2 |a === b| | ||
|!== |不等于 |2 |a !=== b| | |!== |不等于 |2 |a !=== b| | ||
+ | |||
* 在进行等式运算中,“==”和“!=”又被称作是逻辑等式运算符,由于等式运算中的两个操作数有可能是x和z,因此其运算结果可能是不定值x。但是,“===”和“!==”对比时要求两个操作数必须完全一致,因此其运行结果只有0和1两种。 | * 在进行等式运算中,“==”和“!=”又被称作是逻辑等式运算符,由于等式运算中的两个操作数有可能是x和z,因此其运算结果可能是不定值x。但是,“===”和“!==”对比时要求两个操作数必须完全一致,因此其运行结果只有0和1两种。 | ||
=== 9、赋值运算符 === | === 9、赋值运算符 === | ||
行 109: | 行 115: | ||
* 赋值运算就是Verilog HDL的赋值语句,根据赋值操作后变量改变方式的不同,赋值语句又分为连续赋值和过程赋值两种,如表5-8所示。 | * 赋值运算就是Verilog HDL的赋值语句,根据赋值操作后变量改变方式的不同,赋值语句又分为连续赋值和过程赋值两种,如表5-8所示。 | ||
* 表5-8 赋值运算符 | * 表5-8 赋值运算符 | ||
+ | |||
|操作符 |执行的操作 |操作数个数 |表达式| | |操作符 |执行的操作 |操作数个数 |表达式| | ||
|= |连续赋值 |不定 |a = b| | |= |连续赋值 |不定 |a = b| | ||
|= |过程赋值 |不定 |a = b| | |= |过程赋值 |不定 |a = b| | ||
|<= |过程赋值 |不定 |a <= b| | |<= |过程赋值 |不定 |a <= b| | ||
+ | |||
* 通常,连续赋值运算用于“assign”语句中,用于对wire型变量进行赋值,“=”两侧的操作数是随时变化的,例如: | * 通常,连续赋值运算用于“assign”语句中,用于对wire型变量进行赋值,“=”两侧的操作数是随时变化的,例如: | ||
* assign a = b,当b信号发生变化时,a也随之变化。 | * assign a = b,当b信号发生变化时,a也随之变化。 | ||
行 193: | 行 201: | ||
2、 通过Micro USB线给iCore3L供电; | 2、 通过Micro USB线给iCore3L供电; | ||
3、 将编写好的代码进行编译,编译无报错之后点击“全部运行”按钮,进行全编译。 | 3、 将编写好的代码进行编译,编译无报错之后点击“全部运行”按钮,进行全编译。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_1.png?direct&900 |图5-1 全编译工程}} | |
- | 图5-1 全编译工程 | + | |
4、 全编译通过后,点击左上角的“调试模式”按钮,进入调试模式。然后点击“采集调试信息”按钮。 | 4、 全编译通过后,点击左上角的“调试模式”按钮,进入调试模式。然后点击“采集调试信息”按钮。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_2.png?direct&900 |图5-2 采集调试信息}} | |
- | 图5-2 采集调试信息 | + | |
5、 将clk_25m信号设置为采样时钟,rst_n设置为采样且触发,其他信号设置为仅采样;然后点击红框中“ILVA配置”按钮,即红框中齿轮状图标。 | 5、 将clk_25m信号设置为采样时钟,rst_n设置为采样且触发,其他信号设置为仅采样;然后点击红框中“ILVA配置”按钮,即红框中齿轮状图标。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_3.png?direct |图5-3 设置采样信号}} | |
- | 图5-3 设置采样信号 | + | |
6、 将采样深度设置为1024,然后点击确定,并点击“文件”按钮,下拉菜单中点击“保存工程…”。 | 6、 将采样深度设置为1024,然后点击确定,并点击“文件”按钮,下拉菜单中点击“保存工程…”。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_4.png?direct |图5-4 设置采样深度}} | |
- | 图5-4 设置采样深度 | + | |
7、 点击“实现→下载”按钮,将仿真文件下载到FPGA中,然后点击实时调试按钮。 | 7、 点击“实现→下载”按钮,将仿真文件下载到FPGA中,然后点击实时调试按钮。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_5.png?direct&900 |图5-5 将仿真文件下载到FPGA}} | |
- | 图5-5 将仿真文件下载到FPGA | + | |
8、 单击rst_n信号,设置触发表达式,将触发类型设置为“算数比较”,“等于”,“1’h1”,然后点击确定,再点击左上角的“运行”,开始进行信号的采集。 | 8、 单击rst_n信号,设置触发表达式,将触发类型设置为“算数比较”,“等于”,“1’h1”,然后点击确定,再点击左上角的“运行”,开始进行信号的采集。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_6.png?direct&900 |图5-6 设置触发表达式及运行}} | |
- | 图5-6 设置触发表达式及运行 | + | |
9、 信息输出窗口出现“Done:1”,表示调试完成,同时会出现下图中调试完成的提示,点击“OK”即可;然后点击工具栏红框中的“波形”按钮,查看调试波形。 | 9、 信息输出窗口出现“Done:1”,表示调试完成,同时会出现下图中调试完成的提示,点击“OK”即可;然后点击工具栏红框中的“波形”按钮,查看调试波形。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_7.png?direct&900 |图5-7 调试完成提示}} | |
- | 图5-7 调试完成提示 | + | |
10、 如果出现如下弹窗,则检查触发条件设置是否满足触发要求,或者采样深度是深度是否过大等原因。 | 10、 如果出现如下弹窗,则检查触发条件设置是否满足触发要求,或者采样深度是深度是否过大等原因。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_8.png?direct |图5-8 调试失败提示}} | |
- | 图5-8 调试失败提示 | + | |
11、 通过HqInsight Debugger工具对运算结果进行采集,进行对比验证HqInsight Debugger采集到的运算结果与逻辑运算的实验结果。 | 11、 通过HqInsight Debugger工具对运算结果进行采集,进行对比验证HqInsight Debugger采集到的运算结果与逻辑运算的实验结果。 | ||
- | + | {{ :icore3l:icore3l_fpga_5_9.png?direct&900 |图5-9 波形图显示运行结果1}} | |
- | 图5-9 波形图显示运行结果1 | + | |
- | + | {{ :icore3l:icore3l_fpga_5_10.png?direct |图5-10 波形图显示运行结果2}} | |
- | 图5-10 波形图显示运行结果2 | + | |
==== 六、 拓展实验 ==== | ==== 六、 拓展实验 ==== | ||