Skip to content

Commit 28d0762

Browse files
authored
Merge pull request #33 from mchirindo/devel_3
Red Pitaya sys_block default parameters
2 parents 45d7b27 + 71aeffb commit 28d0762

File tree

4 files changed

+76
-11
lines changed

4 files changed

+76
-11
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//============================================================================//
2+
// //
3+
// Parameterize Counter //
4+
// //
5+
// Module name: counter //
6+
// Desc: parameterized counter, counts up/down in any increment //
7+
// Date: Oct 2011 //
8+
// Developer: Rurik Primiani & Wesley New //
9+
// Adapted by: Mathews Chirindo //
10+
// Date: Jan 2020 //
11+
// Licence: GNU General Public License ver 3 //
12+
// Notes: //
13+
// //
14+
//============================================================================//
15+
16+
module counter #(
17+
//==============================
18+
// Top level block parameters
19+
//==============================
20+
parameter DATA_WIDTH = 32, // number of bits in counters
21+
parameter COUNT_FROM = 0, // start with this number
22+
parameter COUNT_TO = 2**(DATA_WIDTH), // value to count to in CL case
23+
parameter STEP = 1 // negative or positive, sets direction
24+
) (
25+
//===============
26+
// Input Ports
27+
//===============
28+
input user_clk,
29+
input en,
30+
input user_rst,
31+
32+
//===============
33+
// Output Ports
34+
//===============
35+
output reg [DATA_WIDTH-1:0] count_out,
36+
output we
37+
);
38+
39+
assign we = 1'b1;
40+
41+
// Synchronous logic
42+
always @(posedge user_clk) begin
43+
// if ACTIVE_LOW_RST is defined then reset on a low
44+
// this should be defined on a system-wide basis
45+
if (`ifdef ACTIVE_LOW_RST user_rst `else !user_rst `endif) begin
46+
if (en == 1) begin
47+
count_out <= count_out + STEP;
48+
end
49+
end
50+
else begin
51+
count_out <= COUNT_FROM;
52+
end // else: if(rst != 0)
53+
end
54+
endmodule
55+

jasper_library/toolflow.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -810,11 +810,12 @@ def generate_xml_memory_map(self, memory_map):
810810
# node.set('size', str(reg.nbytes))
811811
node.set('permission', reg.mode)
812812
if reg.mode == 'r':
813-
# Basically a To Processor register (status)
814-
node.set('hw_permission', 'w')
815-
# Populate defaults if sys_block version registers
816-
if reg.name == 'sys_board_id' or reg.name == 'sys_rev' or reg.name == 'sys_rev_rcs':
817-
node.set('hw_rst', str(reg.default_val))
813+
if reg.default_val != 0:
814+
# Populate defaults of sys_block version registers
815+
node.set('hw_rst', str(reg.default_val))
816+
else:
817+
# Basically a To Processor register (status)
818+
node.set('hw_permission', 'w')
818819
else:
819820
# Only for a From Processor register (control)
820821
node.set('hw_rst', str(reg.default_val))

jasper_library/yellow_blocks/red_pitaya.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def modify_top(self,top):
9292

9393

9494
def gen_children(self):
95-
return [YellowBlock.make_block({'tag': 'xps:sys_block', 'board_id': '4', 'rev_maj': '1', 'rev_min': '0', 'rev_rcs': '1'}, self.platform)]
95+
return [YellowBlock.make_block({'fullpath': self.fullpath, 'tag': 'xps:sys_block', 'board_id': '4', 'rev_maj': '1', 'rev_min': '0', 'rev_rcs': '1','scratchpad': '0'}, self.platform)]
9696
# return [YellowBlock.make_block({'tag': 'xps:sys_block', 'board_id': '3', 'rev_maj': '2', 'rev_min': '0', 'rev_rcs': '1'}, self.platform),
9797
# YellowBlock.make_block({'tag': 'xps:AXI4LiteInterconnect', 'name': 'AXI4LiteInterconnect'}, self.platform)]
9898

jasper_library/yellow_blocks/sys_block.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,31 @@
22
from memory import Register
33
from .yellow_block_typecodes import *
44

5+
56
class sys_block(YellowBlock):
67
def initialize(self):
78
self.typecode = TYPECODE_SYSBLOCK
8-
self.add_source('sys_block')
9+
self.add_source('sys_block')
910
# the internal memory_map
1011
self.memory_map = [
1112
Register('sys_board_id', mode='r', offset=0, default_val=self.board_id),
1213
Register('sys_rev', mode='r', offset=0x4, default_val=str((int(self.rev_maj) << 16) + int(self.rev_min))),
1314
Register('sys_rev_rcs', mode='r', offset=0xc, default_val=self.rev_rcs),
14-
Register('sys_scratchpad', mode='rw', offset=0x10),
15+
Register('sys_scratchpad', mode='rw', offset=0x10, default_val=self.scratchpad),
1516
Register('sys_clkcounter', mode='r', offset=0x14),
1617
]
1718
def modify_top(self,top):
18-
# check for mmbus_architecture (added to bus arch. support for AXI4-Lite)
1919
if self.platform.mmbus_architecture == 'AXI4-Lite':
20-
top.add_axi4lite_interface('sys_block', mode='r', nbytes=32, memory_map=self.memory_map, typecode=self.typecode)
20+
inst = top.get_instance('counter', 'counter_inst')
21+
inst.add_parameter('DATA_WIDTH', 32)
22+
inst.add_port('user_clk', 'user_clk')
23+
inst.add_port('user_rst', 'user_rst')
24+
inst.add_port('en', '1')
25+
design_name = self.fullname.replace("_"+self.fullpath, "")
26+
inst.add_port('we', signal='%s_sys_clkcounter_we' % design_name, dir='out', width=1)
27+
inst.add_port('count_out', signal='%s_sys_clkcounter_in' % design_name, dir='out', width=32)
28+
top.add_axi4lite_interface('sys_block', mode='r', nbytes=32, memory_map=self.memory_map, typecode=self.typecode)
29+
2130
else:
2231
inst = top.get_instance('sys_block', 'sys_block_inst')
2332
inst.add_parameter('BOARD_ID', self.board_id)
@@ -26,4 +35,4 @@ def modify_top(self,top):
2635
inst.add_parameter('REV_RCS', self.rev_rcs)
2736
inst.add_port('user_clk', 'user_clk', parent_port=False, parent_sig=False)
2837
inst.add_wb_interface('sys_block', mode='r', nbytes=32, memory_map=self.memory_map, typecode=self.typecode)
29-
38+

0 commit comments

Comments
 (0)