`default_nettype none | |
// Top level io for this module should stay the same to fit into the scan_wrapper. | |
// The pin connections within the user_module are up to you, | |
// although (if one is present) it is recommended to place a clock on io_in[0]. | |
// This allows use of the internal clock divider if you wish. | |
module user_module_341452019534398035( | |
input [7:0] io_in, | |
output [7:0] io_out | |
); | |
hello_341452019534398035 hello_core( | |
.clk(io_in[0]), | |
.dip_switch(io_in[7:1]), | |
.segments(io_out[6:0]), | |
.decimal(io_out[7]) | |
); | |
endmodule | |
// Any submodules should be included in this file, | |
// so they are copied into the main TinyTapeout repo. | |
// Appending your ID to any submodules you create | |
// ensures there are no clashes in full-chip simulation. | |
module hello_341452019534398035( | |
input clk, | |
input [6:0] dip_switch, | |
output [6:0] segments, | |
output decimal | |
); | |
wire slow_clock; | |
reg [15:0] clock_div; | |
reg [2:0] state; | |
wire flash; | |
wire [2:0]selected_state; | |
reg [6:0] hello_seg_output; | |
reg [6:0] rpog_seg_output; | |
always@(posedge clk)clock_div+=1; | |
assign slow_clock = clock_div[dip_switch[3:0]]; | |
always@(posedge slow_clock)state+=1; | |
assign selected_state = dip_switch[6]? state: dip_switch[2:0]; | |
assign flash = (dip_switch[6]? slow_clock : dip_switch[3])|dip_switch[4]; | |
assign decimal = !flash; | |
initial begin | |
clock_div = 0; | |
state = 0; | |
end | |
always@(selected_state)begin | |
case(selected_state) | |
0: hello_seg_output= 7'b1110100; //H | |
1: hello_seg_output= 7'b1111001; //E | |
2: hello_seg_output= 7'b0111000; //L | |
3: hello_seg_output= 7'b0111000; //L | |
4: hello_seg_output= 7'b0111111; //O | |
default: hello_seg_output= 7'b0000000; | |
endcase | |
end | |
always@(selected_state)begin | |
case(selected_state) | |
0: rpog_seg_output= 7'b1010000; //R | |
1: rpog_seg_output= 7'b1110011; //P | |
2: rpog_seg_output= 7'b0111111; //O | |
3: rpog_seg_output= 7'b1111101; //G | |
default: rpog_seg_output= 7'b0000000; | |
endcase | |
end | |
assign segments = flash?( dip_switch[5] ? rpog_seg_output : hello_seg_output): 7'b000000; | |
endmodule |