FPGA 学习笔记

这篇博客主要介绍了FPGA学习中的两个基本模块:计数器和38译码器。在计数器部分,博主遇到了多驱动问题,导致编译错误。通过修改代码,解决了这个问题,避免了同一信号在多个进程中被赋值。在38译码器部分,博主展示了如何根据输入实现不同的输出状态,并强调了在always块中对所有输入变量敏感的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 计数器学习


module my_counter(clk,rstn,led);
 
 input clk;
 input rstn;
 output reg led;
  reg[24:0] count;
 
 
 always@(posedge clk,negedge rstn)
     if(rstn == 1'b0) 
     count = 1'b0;
else if(count == 25'd5000)
  count = 1'b0;
else count = count + 1'b1;
 


always@(posedge clk,negedge rstn)
    if(rstn == 1'b0) 
     count = 1'b0;
else if(count == 25'd5000)
  
     led = ~led;
 
else led = led;



endmodule 

编译时报错:Error (10028): Can't resolve multiple constant drivers for net "count[22]" at my_counter.v(12)

原因两个进程里都有同一个条件判断的话,会产生并行信号冲突的问题,同一个信号不允许在多个进程中赋值,否则则为多驱动,进程的并行性决定了多进程不能对同一个对象进行赋值。在此例中,两个always语句里面都对count信号赋值了,而两个always是并行快,所以提示出现多重驱动的情况。


修改后的代码如下(编译无错误):

module my_counter(Clk,Rst_n,led);
 
 input Clk;
 input Rst_n;
 output reg led;
  reg[24:0] cnt;
 
 
 always@(posedge Clk,negedge Rst_n)
     if(Rst_n == 1'b0) 
     cnt = 25'd0;
else if(cnt == 25'd5000)
  cnt = 25'd0;
else cnt = cnt + 1'b1;
 


always@(posedge Clk,negedge Rst_n)
    if(Rst_n == 1'b0) 
 led = 1'b0;
else if(cnt == 25'd5000)
  led = ~led;
 
else led = led;

endmodule 

    


2. 38译码器学习

Module my_38circuit(a,y);
 
 input [2:0]a;
 output reg [7:0]y;
 
 
 always@(*)     //  * 表示对后面所有的输入变量是敏感的
  begin
      case(a[2:0])


        3'b000: y = 8'b0000_0001;          //always 中的赋值变量必须定位为reg类型
        3'b001: y = 8'b0000_0010;
        3'b010: y = 8'b0000_0100;
        3'b011: y = 8'b0000_1000;
        3'b100: y = 8'b0001_0000;
        3'b101: y = 8'b0010_0001;
        3'b110: y = 8'b0100_0001;
        3'b111: y = 8'b1000_0001;
          default:y = 8'b0000_0000;
 
       endcase                               // case ......endcase 要配对,begin ....end 也要配对

  end 
 
 endmodule 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值