FPGA 学习笔记
2017-11-30 10:57
393 查看
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
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
相关文章推荐
- Xilinx FPGA 学习笔记——时钟资源
- FPGA学习笔记(转)
- xilinx fpga学习笔记5:Xst综合属性
- xilinx fpga学习笔记7:时序约束原理
- FPGA\\CPLD设计学习笔记(转)
- 特权同学的FPGA\CPLD设计学习笔记
- HELLO FPGA学习笔记
- FPGA学习笔记之流水灯(1)
- ALTERA DE2 之 verilog HDL 学习笔记03 FPGA的PWM输出
- xilinx fpga学习笔记4
- xilinx fpga学习笔记5:Xst综合属性
- ALTERA DE2 之 verilog HDL 学习笔记05-FPGA UART RS232
- FPGA学习笔记——分频电路设计
- FPGA 学习笔记(十二) 如何用串口发送32位数据?
- FPGA学习笔记之按键控制
- FPGA小白学习笔记(一)--Verilog语法学习(1)
- xilinx fpga学习笔记7:实现属性参数的功能
- FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程(转)
- 深度学习FPGA实现基础知识5(网友一致认可的----Deep Learning(深度学习)学习笔记整理及完整版下载)