14 changed files with 331 additions and 210 deletions
-
56led_test.fdc
-
78led_test.pds
-
4source/src/rd_data_router.v
-
20source/src/spi_reg_reader.v
-
172source/src/top.v
-
18source/src/zutils/zutils_edge_detecter.v
-
4source/src/zutils/zutils_multiplexer_16t1.v
-
4source/src/zutils/zutils_multiplexer_4t1.v
-
4source/src/zutils/zutils_pluse_generator.v
-
5source/src/zutils/zutils_pwm_generator.v
-
2source/src/zutils/zutils_register.v
-
96source/src/zutils/zutils_register.v.bak
-
4source/src/zutils/zutils_signal_filter.v
-
40source/test/test_top.v
@ -0,0 +1,96 @@ |
|||||
|
module zutils_register16 #( |
||||
|
parameter REG_START_ADD = 0, |
||||
|
parameter REG0_INIT = 0, |
||||
|
parameter REG1_INIT = 0, |
||||
|
parameter REG2_INIT = 0, |
||||
|
parameter REG3_INIT = 0, |
||||
|
parameter REG4_INIT = 0, |
||||
|
parameter REG5_INIT = 0, |
||||
|
parameter REG6_INIT = 0, |
||||
|
parameter REG7_INIT = 0, |
||||
|
parameter REG8_INIT = 0, |
||||
|
parameter REG9_INIT = 0, |
||||
|
parameter REGA_INIT = 0, |
||||
|
parameter REGB_INIT = 0, |
||||
|
parameter REGC_INIT = 0, |
||||
|
parameter REGD_INIT = 0, |
||||
|
parameter REGE_INIT = 0, |
||||
|
parameter REGF_INIT = 0 |
||||
|
|
||||
|
) ( |
||||
|
input clk, //clock input |
||||
|
input rst_n, //asynchronous reset input, low active |
||||
|
|
||||
|
//regbus interface |
||||
|
input [31:0] addr, |
||||
|
input [31:0] wr_data, |
||||
|
input wr_en, |
||||
|
|
||||
|
output [31:0] rd_data, //received serial data |
||||
|
|
||||
|
output [31:0] reg0, |
||||
|
output [31:0] reg1, |
||||
|
output [31:0] reg2, |
||||
|
output [31:0] reg3, |
||||
|
output [31:0] reg4, |
||||
|
output [31:0] reg5, |
||||
|
output [31:0] reg6, |
||||
|
output [31:0] reg7, |
||||
|
output [31:0] reg8, |
||||
|
output [31:0] reg9, |
||||
|
output [31:0] regA, |
||||
|
output [31:0] regB, |
||||
|
output [31:0] regC, |
||||
|
output [31:0] regD, |
||||
|
output [31:0] regE, |
||||
|
output [31:0] regF |
||||
|
); |
||||
|
|
||||
|
parameter REG_END_ADD = REG_START_ADD + 16 - 1; //寄存器结束地址 |
||||
|
reg [31:0] data[0:15] = 0; |
||||
|
|
||||
|
assign reg0 = data[0]; |
||||
|
assign reg1 = data[1]; |
||||
|
assign reg2 = data[2]; |
||||
|
assign reg3 = data[3]; |
||||
|
assign reg4 = data[4]; |
||||
|
assign reg5 = data[5]; |
||||
|
assign reg6 = data[6]; |
||||
|
assign reg7 = data[7]; |
||||
|
assign reg8 = data[8]; |
||||
|
assign reg9 = data[9]; |
||||
|
assign regA = data[10]; |
||||
|
assign regB = data[11]; |
||||
|
assign regC = data[12]; |
||||
|
assign regD = data[13]; |
||||
|
assign regE = data[14]; |
||||
|
assign regF = data[15]; |
||||
|
|
||||
|
integer i; |
||||
|
always @(posedge clk or negedge rst_n) begin |
||||
|
if (!rst_n) begin |
||||
|
data[0] <= REG0_INIT; |
||||
|
data[1] <= REG1_INIT; |
||||
|
data[2] <= REG2_INIT; |
||||
|
data[3] <= REG3_INIT; |
||||
|
data[4] <= REG4_INIT; |
||||
|
data[5] <= REG5_INIT; |
||||
|
data[6] <= REG6_INIT; |
||||
|
data[7] <= REG7_INIT; |
||||
|
data[8] <= REG8_INIT; |
||||
|
data[9] <= REG9_INIT; |
||||
|
data[10] <= REGA_INIT; |
||||
|
data[11] <= REGB_INIT; |
||||
|
data[12] <= REGC_INIT; |
||||
|
data[13] <= REGD_INIT; |
||||
|
data[14] <= REGE_INIT; |
||||
|
data[15] <= REGF_INIT; |
||||
|
end else begin |
||||
|
if (wr_en && addr >= REG_START_ADD && addr <= REG_END_ADD) |
||||
|
data[addr-REG_START_ADD] <= wr_data; |
||||
|
end |
||||
|
end |
||||
|
assign rd_data = (addr >= REG_START_ADD && addr <= REG_END_ADD) ? data[addr-REG_START_ADD] : 31'b0; |
||||
|
|
||||
|
|
||||
|
endmodule |
Write
Preview
Loading…
Cancel
Save
Reference in new issue