Вот код устройства:
Код
// HEX Decoder
module HEXDEC(input wire [3:0] in, input CE, output reg [6:0] out);
always @(in, CE)
begin
if(CE)
begin
case(in)
4'h0: out = ~7'b0111111;
4'h1: out = ~7'b0000110;
4'h2: out = ~7'b1011011;
4'h3: out = ~7'b1001111;
4'h4: out = ~7'b1100110;
4'h5: out = ~7'b1101101;
4'h6: out = ~7'b1111101;
4'h7: out = ~7'b0000111;
4'h8: out = ~7'b1111111;
4'h9: out = ~7'b1101111;
4'hA: out = ~7'b1110111;
4'hB: out = ~7'b1111100;
4'hC: out = ~7'b0111001;
4'hD: out = ~7'b1011110;
4'hE: out = ~7'b1111001;
4'hF: out = ~7'b1110001;
endcase
end
else out = ~7'b0000000;
end
endmodule
// Top Level
module hex_ctrl
(
/// ALTERA AVALON BUS SIGNALS
// inputs:
input Address,
input chipselect,
input clk,
input reset_n,
input write_n,
input [31:0] writedata,
// outputs:
output reg [31:0] readdata,
/// HEX OUTPUTS
output [6:0] hex0,
output [6:0] hex1,
output [6:0] hex2,
output [6:0] hex3,
output reg GoodWrite,
output reg [3:0] Address_P
);
reg [31:0] HEXDR; // HEX DATA REGISTER
reg [31:0] HEXCR; // HEX CONTROL REGISTER
HEXDEC Dec0(.in(HEXDR[03:00]), .CE(HEXCR[0]), .out(hex0));
HEXDEC Dec1(.in(HEXDR[07:04]), .CE(HEXCR[0]), .out(hex1));
HEXDEC Dec2(.in(HEXDR[11:08]), .CE(HEXCR[0]), .out(hex2));
HEXDEC Dec3(.in(HEXDR[15:12]), .CE(HEXCR[0]), .out(hex3));
// Read
always @(posedge clk or negedge reset_n)
begin
if(reset_n == 0)
begin
readdata <= 0;
end else begin
case(Address)
1'b0: readdata <= HEXDR;
1'b1: readdata <= HEXCR;
endcase
end
end
// Write
always @(negedge clk or negedge reset_n)
begin
if(reset_n == 1'b0)
begin
HEXDR <= 32'h0;
HEXCR <= 32'b0;
GoodWrite <= 1'b0;
Address_P <= 1'b0;
end
else
begin
if(chipselect && ~write_n)
begin
GoodWrite <= 1'b1;
Address_P[0] <= Address;
if(Address == 0) HEXDR <= writedata;
else if(Address == 1) HEXCR <= writedata;
end
end
end
endmodule
//----------------------------------------------------------------------------
И вот код для проца:
Код
#include "system.h"
typedef volatile struct
{
unsigned int HEXDR;
unsigned int HEXCR;
} hex_ctrl;
int main()
{
hex_ctrl* hex0 = (hex_ctrl*)HEX_CTRL_0_BASE;
hex0 -> HEXCR = 0x1;
hex0 -> HEXDR = 0x1234;
return 0;
}
Я новичок в ПЛИСах, может упускаю чего... Если что подскажите - буду благодарен
Сообщение отредактировал AlexBalan - Mar 24 2011, 13:04