verilog复习与vhdl入门

verilog复习与vhdl入门

1.Verilog回顾

  • 基本结构

    verilog以module为单位,module的基本结构:

    (1)模块声明(内含端口定义),如:

    ​ module (

    ​ input wire clk,

    ​ input wire rst_n,

    ​ output reg q

    ​ );

    ​ …

    ​ endmodule

    (2)内部信号定义,内部参数定义,如:

    ​ reg [7:0] cnt;

    ​ parameter IDLE = 3‘b001;

    (3)逻辑功能实现,如:

    ​ always @ (a or b) begin

    ​ if (!a) b <= 0;

    ​ else b <= 1;

    ​ end (组合逻辑)

    ​ always @ (posedge clk) begin

    ​ if (cnt == 3’b000) q <= 1;

    ​ end (时序逻辑)

    ​ assign data = a & b; (线网赋值)

    (4)元件例化,如:

    ​ and a3 (

    ​ .clk (clk),

    ​ .rst_n (rst_n),

    ​ .q (q)

    ​ ); (端口映射,用信号名关联)

  • 常用语句

    (1)逻辑实现

    ​ 条件语句(组合逻辑记得写else),case语句(组合逻辑记得写default),

    ​ always语句(电平敏感——组合逻辑;边沿敏感——时序逻辑,一个always只处理一个信号)

    (2)仿真实现

    ​ initial块(给输入信号赋初值/构建输入波形),always语句(此处只有延时,用于时钟创建),

    ​ 元件例化(写testbench就是写一个模块去调用要仿真的模块)

    (3)注释:// 和/* */

  • 编程重要思想

    (1)计数器

    ​ 初步理解,常用于控制时序,利用计数的值实现在特定时间做某些动作

    ​ 已尝试的场合:结合case语句,在计数到某个值时做特定动作

    (2)有限状态机

    ​ 初步理解,解决多状态事件常用,一般步骤:

    ​ 根据具体问题,抽象出事件发展时的所有状态;

    ​ 选择起始状态,并使用合适的状态编码;

    ​ 画出状态转换图,标出转换条件与输出;

    ​ 根据此图写描述代码,常用两段式(状态转换+输出处理),注意未用到状态的处理;

    ​ 常用语句:case语句,if语句,always语句

    (3)流水线

    ​ 未使用。

2.VHDL回顾

  • 基本结构

    entity,architecture,process,library

  • 常用语句

3.Verilog与VHDL的联系

  • 相同的层次化设计思想

    无论是哪种语言,设计一个规模不小的电路,层次化设计的方法论是必须的,

    其中两大核心:模块划分和模块重用,总是适用的。

    模块划分原则:

    (1)模块功能单一,与其他模块相对独立

    (2)模块间的连接要简单

    (3)设计参数化的模块,根据参数的不同,实现结构类似功能不同的一类电路,

    ​ 而参数值的改变,在上层模块调用下层模块时可进行值的覆盖。

    模块重用:

    类似与软件编程中的函数,使代码功能专门化,但不同的是,由于设计的是硬件电路,即使需要的都是同样的功能,只是在不同的地方使用,在电路中也要复制出相应数量的物理实体,这从RTL网表中可以看出。

  • 相同的并行处理思想

    两种语言的并行处理源自于硬件电路的并行性,HDL代码对应的都是电路中的模块,只要电路一上电,各个模块就会同时开始各自的工作,即使有时钟的控制。钟控使得模块可以按照一定的节奏执行动作,但实际上并行没有改变。

    举个不太生动的例子:

    组合逻辑好比往没有阀门的水管通水,数据流一旦进入,就会立即被处理,然后输出,中间没有等待;

    而时序逻辑好比在管子上加了许多阀门,像竹子一般,所有阀门同开同闭,水流是一节一节地往外走;

    两个过程中,各部分水管的工作不会相互阻碍,像流水线一般,每个工人都在干活,没有停下的。

  • always vs process

    verilog中的always,vhdl中的process,都是一个模块中逻辑功能实现的主要手段,两种语句都表现出相似的四种特性:反复执行,多个之间并行执行,块内顺序执行,需要触发

    反复执行与需要触发:

    always和process中的语句执行都要有条件:电平敏感/边沿敏感,通常的执行过程是:等待触发——触发——执行动作——挂起并等待下一次触发,这个过程从系统上电开始,直到系统掉电结束。

    多个之间并行与块内顺序执行:

    由于都是模块功能实现语句,多个always/process之间的关系就像电路中各个模块之间的关系,相互之间既有信号交流,又互不干扰,各自工作。

  • 阻塞赋值与变量赋值,非阻塞赋值与信号赋值

    这两种情况不是完全类似,但主要特性十分相似。

    阻塞赋值与变量赋值都是立即生效的,在赋值号右边的表达式值计算完成,便立即被赋予到左边的信号中;

    非阻塞赋值和信号赋值都具有延迟,在计算表达式值后,更新信号这个事件会挂起,直到整个过程块执行完毕,信号才会更新。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值