写verilog程序时遇到的零碎知识点

1、 Altera的PLL的arest是高电平复位,当锁相环稳定输出后会把locked拉高

2、 定义寄存器变量时:

reg [9:0] data [63:0];

这个语句定义的是64个10位的data,在使用时data [x] [y] 表示第x个data的第y位。

3、 写if语句时

if()
else()
   if									//①
   else if
   else
   
   if									//②
   else if
   else

①和②是两个if块,当跳出第一个if块后,第二个if块也要运行。

4、 阻塞赋值的理解

reg                gate_fs_d0  ;        
reg                gate_fs_d1  ; 

assign neg_gate_fs = gate_fs_d1 & (~gate_fs_d0);

always @(posedge clk_fs or negedge rst_n) begin
    if(!rst_n) begin
        gate_fs_d0 <= 1'b0;
        gate_fs_d1 <= 1'b0;
    end
    else begin
        gate_fs_d0 <= gate_fs;
        gate_fs_d1 <= gate_fs_d0;
    end
end

这个neg_gate_fs会在gate_fs下降沿到来的时刻立即置1,不会延迟1个 clk_fs再置1。虽然可以用延迟1个clk赋值来理解阻塞赋值,但对于这里不能那样去理解。

5、 inout端口的使用方法(比较一下DHT11和EEPROM实验中两种inout使用的方法)
法一:
当用作输出端口时,用reg来赋值,把需要输出的量赋给reg变量

inout                dht11      ,   //dht11温湿度传感器单总线

reg            dht11_buffer;        //DHT11输出信号

assign dht11     = dht11_buffer;

当用作输入端口时,要给reg赋值高阻态,然后再去读输入

                    dht11_buffer <= 1'bz; //起始信号结束后释放总线

DHT11实验中,我们对dht11_buffer的赋值(赋高低电平,不是高阻态),会影响dht11_pos和dht11_neg的值,所以当我们需要测得真实的inout的口的电平变化时,要先给dht11_buffer高阻态,这个时候的dht11_pos和dht11_neg值才准确。

法二:

assign  sda     = sda_dir ?  sda_out : 1'bz;     // SDA数据输出或高阻
assign  sda_in  = sda ;                          // SDA数据输

改变 sda_dir 的值就能改变sda的端口属性

6、 在rtc实时时钟的程序中,判断按键键值没用key_flag信号,因为按键模块和pcf8583模块的时钟不同,key_flag只持续了快时钟域的一个clk,在慢时钟域的pcf8583模块可能采不到,虽然可以用异步信号的同步方法处理,但这个实验中有一种更简单的方法,用key_value的下降沿来判断。因为key_value在按键消抖后才会被赋值,所以不怕抖动的影响。
7、 位拼接时,不管被拼接的原量以什么进制存储,在拼接时,都是二进制按顺序拼接。比如hour,min,sec全部按十进制赋值,但拼接时会转为二进制11_1_100,转为10进制是不等于314的。假如hour,min,sec不用parameter 定义,而是用的四位reg,则拼接时是0011_0001_0100。

parameter hour=4'd3;
parameter min =4'd1;
parameter sec =4'd4;

assign rtc_time = {hour,min,sec};

8、 可综合的for循环(网上看的没试过,以后有空试一下)

always@(posedge clk) begin : for_
	for(integer index = 0; index < 10; index = index + 1) begin
		data[index] <= data[index] + 1;
	end
end

8、
组合逻辑中,在应用条件语句时(例如if_else;case等),没有列出所有的可能情况,就会生成锁存器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值