在两三个月前粗略看了一遍夏宇闻的《verilog数字系统设计》,现在都忘记了好多

,暑假留校开始努力学FPGA

咬咬牙狠心花了一个好几百大洋(出了血本)买了一块FPGA开发板。现在坚持多学点东西,不然毕业回家就种田了。

刚刚做了第一个实验:按键控制led
用了一个二选一多路选择器实现
当如果key是低电平则led输出的电瓶高低和a端的电瓶高低一样反之和b相同
用了一个连续赋值语句实现
- module led(a,b,key,led_out);
- input a;//輸入端口a
- input b;//輸入端口b
- input key;//輸入端口key 選擇
-
- output led_out;//輸出端口led_out
-
- assign led_out = (key == 0) ? a : b;
-
- endmodule
复制代码连续赋值语句assign:
连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值
input和output信号的类型默认是wire信号的
然后写了一个testbench
- `timescale 1ns/1ps//前面是仿真步进,后面是仿真精度 #100*1ns #100.1 精度
- module led_tb;//测试模块
- //激勵信號
- reg signed_a;//信号激励源
- reg signed_b;
- reg signed_c;//key
-
- wire ledl;
- led led0(
- .a(signed_a),
- .b(signed_b),
- .key(signed_c),
- .led_out(ledl)
- );//模块例化
- initial begin
- signed_a = 0;signed_b = 0;signed_c = 0;
- #100;//延時100ns
- signed_a = 0;signed_b = 0;signed_c = 1;
- #100;
- signed_a = 0;signed_b = 1;signed_c = 0;
- #100;
- signed_a = 0;signed_b = 1;signed_c = 1;
- #100;
- signed_a = 1;signed_b = 0;signed_c = 0;
- #100;
- signed_a = 1;signed_b = 0;signed_c = 1;
- #100;
- signed_a = 1;signed_b = 1;signed_c = 0;
- #100;
- signed_a = 1;signed_b = 1;signed_c = 1;
- #200;
- $stop;
- end
-
- endmodule
复制代码然后开始RTL仿真,符合设计初衷

然后进行门

发现和RTL仿真的波形居然会不一样。现在还不知道为什么,怎么去避免。
然后我分配了引脚下载到开发板上了

a接gnd
b接vcc


a接vcc
b接gnd


做完了第一个实验
本文来自论坛,点击查看完整帖子内容。