《VHDL 数字电路设计教程》电工版/第5章:并发代码

本文介绍了VHDL中的并发执行与顺序执行的区别,重点讲解了组合逻辑与时序逻辑电路的概念,并深入探讨了VHDL中的并发代码元素,如运算操作符、WHEN语句、GENERATE语句及BLOCK语句的应用方法。

5.1    并发执行和顺序执行

    ①组合逻辑电路:当前输出的值仅取决于当前的输入;

       时序逻辑电路:当前输入不仅取决于当前的输入,还与以前的输入有关。时序逻辑电路中通常存在寄存器这类元件,当前的输出结果是由当前输入和电路内部所有寄存器的状态共同决定的。

        

    ②VHDL代码是并发执行的

    注意,在PROCESSFUNCTIONPROCEDURE这些模块内部的代码是顺序执行的,但是它们作为一个整体,与其他模块之间又是并发执行的。

    并发代码中可以使用以下各项:

    -运算操作符

    -WHEN语句(WHEN/ELSE或者WITH/SELECT/WHEN

    -GENERATE语句

    -BLOCK语句

5.2    并发代码各项

    ①运算操作符

    

    ②WHEN语句(适用于枚举类型

    注意:WHEN语句适用于枚举类型,且只允许执行一个赋值操作。

    两种语法结构:

    WHEN/ELSE

assignment1 WHEN condition1 ELSE    --无分号间隔
assignment2 WHEN condition2 ELSE
...
assignmentN-1 WHEN conditionN-1 ELSE
assignmentN;

    WITH/SELECT/WHEN

WITH identifier SELECT
assignment1 WHEN value1,    --逗号分隔
assignment2 WHEN value2,
...
UNAFFECTED WHEN valueM,
...
assignmentN WHEN OTHERS;

    "UNAFFECTED"表示空(不进行任何操作),原来的值保值不变;“OTHERS”表示其余情况下。

    例

--------------with WHEN/ELSE--------------
output <= "000" WHEN input = '0' ELSE
          "001" WHEN input = '1' ELSE
          "010";                       --其余情况下output为“010”
----------with WITH/SELECT/WHEN-----------
WITH input SELECT
   output <= "000" WHEN '0',
             "001" WHEN '1',
             UNAFFECTED WHEN OTHERS;  --input取其他值时output的值保持不变

    另外,WHEN value语句的描述方式包括以下3种:

WHEN value              --针对单个值进行判断
WHEN value1|value2|...  --针对多个值进行判断
WHEN value1 to value2   --针对取值范围进行判断

GENERATE 语句(枚举型的循环操作)

    具体语法结构有两种:

FOR/GENERATE:

label: FOR identifier IN range GENERATE
   (concurrent assignments)                   --并发描述语句
END GENERATE;

    注意,该语句用于循环执行某项操作,故identifier的range范围的上界和下界都必须是静态的。

IF/GENERATE:

label: IF condition GENERATE
   (concurrent assignments)      --不允许使用ELSE
END GENERATE;

④块语句(BLOCK

    简单块(simple BLOCK):仅仅是一种对原有代码进行区域分割的方式,通过将一系列的并发描述语句放在一个simple BLOCLK中,目的是为了增强整个代码的可读性和可维护型。其语法结构如下:

label: BLOCK
   [declarative part]       --声明部分
BEGIN
   (concurrent statement)   --并行陈述
END BLOCK label;

    卫式块(guarded BLOCK):相比于simple BLOCK,这种特殊的BLOCK多了一个卫式表达式。只有当卫式表达式为真时,在guarded BLOCK中前面有关键词GUARDED的语句才能执行。语法结构如下:

label: BLOCK(卫式表达式)
   [声明部分]
BEGIN
   (卫式语句和其他并发描述语句)  --含有关键字GUARDED
END BLOCK label;

    例

b1: BLOCK(clk = '1')
BEGIN
   q <= GUARDED d;  --关键字GUARDED
END BLOCK b1;

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值