计算机组成原理实验1#Verilog相关问题

Verilog问题

  1. 标量表示:reg~~[0:0]~~ →reg

  2. 数字规范问题:rst = 1 → rst = 1’b1, data=data+1’b1

  3. 时序电路用非阻塞【<=】,组合电路用阻塞【=】
    ①时序电路:有无边缘触发
    任意时刻的输出不仅取决于该时刻的输入,还与电路原来的状态有关。电路里面有存储元件(各类触发器,在FPGA 芯片结构中只有D 触发器)用于记忆信息,从电路行为上讲,不管输入如何变化,仅当时钟的上升沿或下降沿到达时,输出才会发生变化。
    · 在描述时序电路的always块中的reg型信号都会被综合成寄存器,这是和组合逻辑电路所不同的。
    · 时序逻辑中推荐使用非阻塞赋值“<=”
    · 时序逻辑的敏感信号列表只需要加入所用的时钟触发沿即可,其余所有的输入和条件判断信号都不用加入,这是因为时序逻辑是通过时钟信号的跳变沿来控制的。
    ②组合电路
    任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关。
    (1)always @(电平敏感信号列表)
    always模块的敏感列表为所有判断条件信号和输入信号,但一定要注意敏感列表的完整性。在always 模块中可以使用if、case 和for 等各种RTL 关键字结构。由于赋值语句有阻塞赋值和非阻塞赋值两类,建议读者使用阻塞赋值语句“=”。always 模块中的信号必须定义为reg 型,不过最终的实现结果中并没有寄存器。这是由于在组合逻辑电路描述中,将信号定义为reg型,只是为了满足语法要求。


    @(条件表达式) do_something;
    表示等待条件表达式满足,然后do_something,然后就往下走了。通常用在testbench中,不可综合。


    always @(a or b or c)  begin
    	do_something;
    end
    

    表示不停地监测括号中的变量a、b、c,一旦它们任何一个发生变化,就立刻执行do_something,并且这个“监测”是始终存在的。这种电路综合出来时组合逻辑电路。


    always @(posedge clk)  begin
    	do_something;
    end
    

    表示不停地监测clk的上升沿,一旦监测到,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时时序逻辑电路。
    当然,也可以把posedge改成negedge,那就成了监测下降沿。

    带异步复位端的寄存器的写法类似是这样的

    always @(posedge clk or negedge rst_n) begin  //  reset is active low
    	if(rst_n)  reset_process;
    	else       set_register_value;
    end
    

    (2)assign描述的赋值语句
    信号只能被定义为wire型

  4. initial模块(仿真文件数据的初始化、赋值)不能用非阻塞【<=】赋值

  5. initial模块不可综合,主程序里不能出现用initial赋值

  6. 仿真文件只负责数据的仿真,不能把程序的逻辑加到仿真文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值