时序电路的Verilog设计

一、时序电路的建模方式

时序电路就是受时钟边沿信号影响的电路。也就是说,时序电路中必须要能感受到边沿信号的出现。Verilog内置的14个门级元件都不支持感受边沿信号,所以,仅通过门级描述不足以对时序电路进行建模。数据流描述的assign语句(持续赋值语句)如同导线将各端口和器件连接起来一样,形象地说,它只能负责端口与器件间的逻辑连接,能不能感受边沿信号还得取决于器件本身,显然也不足以对时序电路进行建模。行为描述可以根据电路功能来进行建模,Verilog中想要感受边沿信号,只需要在always后的敏感信号列表中列出边沿信号即可。由此可见,仅有行为描述能够独立地设计出时序电路

二、时序电路的设计文件模板

1、一般模板
module moduleName(
// 时钟信号定义
// 输入信号列表
// 输出信号列表
    );

    // 内部变量列表

    always @ (<边沿信号列表>) begin
        // 行为建模描述
    end

    // 组合逻辑描述

endmodule

其中,时钟信号在定义的时候也属于输入信号,并且,输入输出信号的定义顺序可以随机打乱,不影响设计结果,上述代码仅为个人习惯。

内部变量列表主要是用来定义一些内部连线型和寄存器型变量。内部变量列表并不是必需的,具体情况要根据设计的电路来确定。

通常情况下,时序电路仅有一个时钟信号,它一定要写在always后的边沿信号列表的第一个位置。边沿信号列表中仅有第一个信号为边沿信号,其他位置虽然写法也是边沿信号,但都是通过电平信号异步影响电路逻辑。

从上述代码可以看出,在时序电路中也可掺杂组合逻辑,所以Verilog设计的过程中需要灵活变通,如果一个模块不能简单使用时序逻辑完成建模,就需要借助组合逻辑共同完成该模块的建模。组合逻辑描述并不是必需的,具体情况要根据设计的电路来确定。

2、具体示例

32位带复位信号的低使能PC:

module PC(
input wire clk,
input wire rst,
input wire n_EN,
input wire [31:0] PCin,
output wire [31:0] PCout
    );

    reg [31:0] mem;

    always @ (posedge clk or posedge rst) begin
        if (rst)
            mem <= 0;
        else begin
            if (!n_EN)
                mem <= PCin;
        end
    end

    assign PCout = mem;

endmodule

三、注意事项

1、时序电路always模块的敏感列表中的所有信号都需要写成边沿信号的格式(即信号名前加上posedge或者negedge),但只有第一个位置的信号是时钟信号

2、时序电路always模块中被赋值的变量依然是寄存器型

3、时序电路always模块中一般全部采用非阻塞赋值在边沿信号到来的时刻,所有赋值语句并发执行,不分先后)。

4、时序电路中的非阻塞赋值持续赋值语句(assign)含义不同,非阻塞赋值是指在边沿信号到来的瞬间并发赋值,而assign是每时每刻都并发赋值。所以,在时序电路蕴含组合逻辑时,要将组合逻辑分离出来,在always模块外实现。

“时序”最容易联想到就是“时序图”,亦即模块的输出。换句话说“时序”是模块执 行过程的显性记录。一般在仿真上,模块的时序图都是在理想状态下(没有任何物理上 的问题)产生的。时序图里边包含了模块最清洁的执行记录。这些信息对于“细化”模 块来说有很大的帮助。然而影响着这些时序就是Verilog HDL 语言本身。 很多时候,虽然低级建模(建模技巧)已经可以帮助我们完成许多模块设计上的要求, 但是低级建模始终是属于“建模”的层次,亦即“塑造”模块一个大概的形状,而且是 粗糙的东西而已。这粗糙的东西,效果能不能发完全发挥? 我们需要经过“细化”它才 知道结果。 要完成“细化”的过程一点也不可以马虎。早期的建模必须留下可以“细化”的种子。 此外我们还要往模块更深入去了解它,去分析它,如果有模块有问题就调试它。这全部 的工作要求,更进一步挑战我们对Verilog HDL 语言的认识和掌握的程度。有关这一点, 再也不是:了解Verilog HDL 语言相关的语法如何使用?如何使用Verilog HDL 语言建 立一个模块?等这些Verilog HDL 语言“外观的单纯工作”,而是“深入分析”模块执 行时的“内部细节”。关于模块一切的一切过程,我们只能在“时序图”上了解而已。 这就是这本笔记命名的初衷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值