刚买了一个红色飓风二代的板子抓紧时间学习哈。
实验内容:
编写按键控制LED的程序和3/8译码器的程序,并在开发板上实现它们。
管脚对应:
push button | SW6 | SW5 | SW4 | SW3 |
FPGA Pin | P51 | P52 | P57 | P58 |
器件 | LED1 | LED2 | LED3 | LED4 | LED5 | LED6 | LED7 | LED8 |
FPGA Pin | P204 | P203 | P200 | P199 | P198 | P197 | P196 | P194 |
信号名称 | VD8 | VD7 | VD6 | VD5 | VD4 | VD3 | VD2 | VD1 |
时钟 50MHz P76
复位 SW2 P152
`timescale 1ns / 1ps
module sw_led(clk, rst, sw0, sw1, sw2, sw3, led0, led1, led2, led3, led4, led5, led6, led7);
input clk;
input rst;
input sw0;
input sw1;
input sw2;
input sw3;
output led0;
output led1;
output led2;
output led3;
output led4;
output led5;
output led6;
output led7;
wire led0;
wire led1;
wire led2;
wire led3;
wire led4;
wire led5;
wire led6;
wire led7;
wire [3 :0] sw;
reg [7 :0] led;
assign sw = {sw0,sw1,sw2,sw3};
assign {led0,led1,led2,led3,led4,led5,led6,led7} = led;
always @ ( posedge clk or negedge rst)
begin
if(!rst)
led<='b0;
else
case ( sw )
4'b1110: led <= 8'b0000_0001;
4'b1101: led <= 8'b0000_0010;
4'b1011: led <= 8'b0000_0100;
4'b0111: led <= 8'b0000_1000;
4'b1100: led <= 8'b0001_0000;
4'b1001: led <= 8'b0010_0000;
4'b0011: led <= 8'b0100_0000;
4'b0110: led <= 8'b1000_0000;
default: led <= 8'b0000_0000;
endcase
end
endmodule
代码注意:因为开发板中的四个按钮中的默认输入为高电平,所以这里的编码看起来有点儿怪。
Macro Statistics
# ROMs : 1
16x8-bit ROM : 1
综合后利用了一个16x8-bit的ROM。
一个三八译码器:
module translater(clk,rst,din,dout);
input clk,rst ;
input [2 :0 ] din ;
output[7 :0 ] dout ;
reg [7 :0 ] dout ;
always @ ( posedge clk or negedge rst )
if( !rst )
dout <= 8'b0000_0000 ;
else
case( {~din[2],~din[1],~din[0]} )
3'b000: dout <= 8'b0000_0001 ;
3'b001: dout <= 8'b0000_0010 ;
3'b010: dout <= 8'b0000_0100 ;
3'b011: dout <= 8'b0000_1000 ;
3'b100: dout <= 8'b0001_0000 ;
3'b101: dout <= 8'b0010_0000 ;
3'b110: dout <= 8'b0100_0000 ;
3'b111: dout <= 8'b1000_0000 ;
endcase
endmodule