Compare commits

...
Author SHA1 Message Date
sessleral71711 17f361ea12 I hate git 2022-06-14 12:33:29 +02:00
sessleral71711 730cc895b1 Merge branch 'top_level_design' of https://git.efi.th-nuernberg.de/gitea/kuntzschcl/ESY1_Projekt_2022 into top_level_design 2022-06-14 12:32:53 +02:00
sessleral71711 019dc2868e Added parallelport, timer and ampelsteuerung 2022-06-14 12:26:26 +02:00
sessleral71711 b30efd039d Added bus_if and fsm to top level design 2022-06-14 12:25:53 +02:00
sessleral71711 ecd6f16dbe merge konflikt behoben 2022-06-14 12:25:25 +02:00
sessleral71711 6a72019f25 Initalized top level design 2022-06-14 12:25:19 +02:00
sessleral71711 53868c67fd Added Bus_if and fsm to top level design 2022-06-14 12:22:52 +02:00
sessleral71711 6ab278694e Initalized top level design 2022-06-14 12:22:52 +02:00
sessleral71711 026899b930 Added parallelport, timer and ampelsteuerung 2022-06-14 12:21:25 +02:00
badenbergra78621 9ffb72cf97 Screenshots from RADIANT --> how to create SPI module with radiant 2022-06-14 09:59:23 +00:00
badenbergra78621 72c964475f Screenshots from RADIANT --> how to create SPI module with radiant 2022-06-14 09:58:24 +00:00
sessleral71711 d2aa8277c7 spi_interface dateien 2022-06-14 11:56:42 +02:00
sessleral71711 c93bdaf629 Added bus_if and fsm to top level design 2022-06-14 11:53:20 +02:00
sessleral71711 1be3ce1cea merge konflikt behoben 2022-06-14 11:52:04 +02:00
sessleral71711 4b0451fc63 Merge branch 'top_level_design' of https://git.efi.th-nuernberg.de/gitea/kuntzschcl/ESY1_Projekt_2022 into top_level_design 2022-06-14 11:51:22 +02:00
sessleral71711 20f8e707bd Added Bus_if and fsm to top level design 2022-06-14 11:45:29 +02:00
badenbergra78621 c46a1c3b33 add "spi_interface_portsI()" (beginning of document) 2022-06-14 09:42:25 +00:00
sessleral71711 6b874ba5c7 Initalized top level design 2022-06-14 11:34:24 +02:00
sessleral71711 200a989683 Added modport for timer 2022-06-14 11:23:54 +02:00
sessleral71711 613bffbcfc Added modport in Bus_if for Fsm 2022-06-14 11:03:41 +02:00
reussch78773 19177edb3f Merge branch 'main' of https://git.efi.th-nuernberg.de/gitea/kuntzschcl/ESY1_Projekt_2022 2022-06-14 11:01:22 +02:00
reussch78773 0ecac8324e Timer and Port source 2022-06-14 11:00:38 +02:00
ueblerju79024 37989e5bc1 Ampel
Ampelsteuerung mit toplevel_verbindungen sowie normaler TB und random TB
2022-06-14 08:59:08 +00:00
sessleral71711 ad550a9ac6 Created bus as interface 2022-06-14 10:49:23 +02:00
sessleral71711 b8d834144b Initalized top level design 2022-06-14 10:35:05 +02:00
18 changed files with 820 additions and 0 deletions

No files matched your search

+45
View File
@@ -0,0 +1,45 @@
interface Bus_if (input clk);
logic sbclk;
logic sbstb;
logic sbrw;
logic[7:0] sbadr;
logic[7:0] sbdat_r;
logic[7:0] sbdat_w;
logic sback;
logic[9:0] Data;
logic SendData;
logic TimerMeas;
logic DataValid;
logic AlarmAmpel;
logic TasteAktiv;
logic Alarm_R;
logic TimerEN;
logic Taste;
logic ReadTemp;
logic LEDg;
logic LEDr;
modport Fsm (
input clk,
input AlarmAmpel,
input DataValid,
input TasteAktiv,
output Alarm_R,
output SendData,
output TimerEN
);
modport timer (
input clk,
input Taste,
input TimerEN,
output ReadTemp,
output TasteAktiv
);
/*
module parallelport wird in top level design
ohne modport verbunden, da inEndOfConv nicht
Teil des Bus_if ist.
*/
endinterface //Bus
+184
View File
@@ -0,0 +1,184 @@
// ==================================================================
// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ------------------------------------------------------------------
// Copyright (c) 2022 by Ampelsteuerungsgruppe
//
// --------------------------------------------------------------------
//
// Project: iCE5UP 5K RGB LED Steuerung
// File: LED_control.sv
// Title: LED Ampelsteuerung
// Description: Creates RGB PWM per data input
//
//
// --------------------------------------------------------------------
//
//------------------------------------------------------------
// Notes:
//
//
//------------------------------------------------------------
// Development History:
//
// __DATE__ _BY_ _____REV_ _DESCRIPTION___________________________
// 17.02.22 AmpelGr 1.0 Initial design for Lattice Radiant Ampelsteuerung
//
//------------------------------------------------------------
// Dependencies:
//
//
//
//------------------------------------------------------------
module LED_control1 (
// inputs
input wire clk12M, // 12M clock
input wire enable, // Asynchronous enable/disable wire
input wire [7:0] data_input, // for selecting color using sensor data
input wire data_valid, // Data on Parallelport is valid on posedge
//outputs
output reg red_pwm, // Red LED
output reg grn_pwm, // Green LED
output reg alarm // Alarmmeldung
);
//------------------------------
// INTERNAL SIGNAL DECLARATIONS:
//------------------------------
// parameters (constants)
parameter on_hi = 2'b10;
parameter on_lo = 2'b01;
parameter off = 2'b00;
parameter Brightness=4'b0111; //50% Brightness
// wires (assigns)
wire [4:0] red_intensity;
wire [4:0] grn_intensity;
wire clk24M;
wire LOCK;
// regs (always)
reg [1:0] RGB_color_s; // selected Color
reg [3:0] Brightness_s;
reg [1:0] red_set; // hi/lo/off
reg [1:0] grn_set;
reg [17:0] red_peak; // LED 'on' peak intensity (high precision)
reg [17:0] grn_peak;
reg [17:0] curr_red; // current LED intensity ( /256 = PWM duty cycle)
reg [17:0] curr_grn;
reg [17:0] pwm_count; // PWM counter
reg [7:0] count = 8'b0;
//------------------------------
// PLL Instantiation
//------------------------------
//Block to reset the PLL initially
pll_24M __(.ref_clk_i(clk12M ), .rst_n_i(~enable), .lock_o(LOCK), .outcore_o( ), .outglobal_o(clk24M));
// Capture stable parameters in local clock domain
always @ (posedge clk24M or posedge enable)
if (enable) begin
RGB_color_s <= 2'b00; //turn off
Brightness_s <= 4'b0000;
alarm <= 0;
end else if(!alarm) begin
if(data_valid) begin
if(data_input <100) begin
RGB_color_s <= 2'b10; // set green
Brightness_s <= Brightness;
end else if(data_input >168) begin
alarm <=1'b1;
end else begin
RGB_color_s <= 2'b11; // set yellow
Brightness_s <= Brightness;
end
end
end else begin
RGB_color_s <= 2'b01; // set Color red
Brightness_s <= Brightness;
end
// interpret 'brightness' setting
assign red_intensity = Brightness_s + 1'b1;
assign grn_intensity = Brightness_s + 1'b1;
// interpret 'color' setting
always @ (RGB_color_s)
case (RGB_color_s)
2'b01: begin red_set <= on_hi; grn_set <= off; end //Red
4'b10: begin red_set <= off; grn_set <= on_hi; end //Green
4'b11: begin red_set <= on_hi; grn_set <= on_hi; end //Yellow
default: begin red_set <= off; grn_set <= off; end //2'b00 off
endcase
// set peak values per 'brightness' and 'color'
// when color setting is 'on_lo', then peak intensity is divided by 2
always @ (posedge clk24M or posedge enable)
if (enable) begin
red_peak <= 18'b0;
end else begin
case (red_set)
on_hi: red_peak <= {red_intensity, 13'h000}; // 100%
on_lo: red_peak <= {1'b0,red_intensity, 12'h000}; // 50%
default: red_peak <= 18'h00000;
endcase
end
always @ (posedge clk24M or posedge enable)
if (enable) begin
grn_peak <= 32'b0;
end else begin
case (grn_set)
on_hi: grn_peak <= {grn_intensity, 13'h000}; // 100%
on_lo: grn_peak <= {1'b0,grn_intensity, 12'h000}; // 50%
default: grn_peak <= 18'h00000;
endcase
//$monitor("grn_peak=%d",grn_peak);
end
// set PWM duty cycle. 8-bit resolution 0x100 is 100% on
always @ (posedge clk24M or posedge enable)
if (enable) begin
curr_red <= 18'b0;
curr_grn <= 18'b0;
end else begin
curr_red <= red_peak;
curr_grn <= grn_peak;
end
// generate PWM outputs
always @ (posedge clk24M or posedge enable)
if (enable) begin
pwm_count <= 18'b0;
red_pwm <= 0;
grn_pwm <= 0;
end else begin
if(pwm_count < 131071)
pwm_count <= pwm_count + 1;
else
pwm_count <= 0;
if(pwm_count < curr_red)
red_pwm <= 1;
else
red_pwm <= 0;
if(pwm_count < curr_grn)
grn_pwm <= 1;
else
grn_pwm <= 0;
end
endmodule // LED_control
+45
View File
@@ -0,0 +1,45 @@
module led_top (
input wire clk12M,
input wire rst,
input wire [7:0] data_input,
input wire data_valid,
output reg RED,
output reg GRN,
output reg alarm
);
wire red_pwm;
wire grn_pwm;
reg REDn;
reg GRNn;
defparam U1.on_hi = 2'b10;
defparam U1.on_lo = 2'b01;
defparam U1.off = 2'b00;
defparam U1.Brightness = 4'b0111; // 50% Brightness
defparam U2.RGB0_CURRENT = "0b111111";
defparam U2.RGB1_CURRENT = "0b111111";
defparam U2.RGB2_CURRENT = "0b111111";
LED_control1 U1 (.clk12M(clk12M),.enable(rst),.data_input(data_input),.data_valid(data_valid),.red_pwm(red_pwm),.grn_pwm(grn_pwm),.alarm(alarm));
RGB U2 (.CURREN('b1),.RGB0PWM(),.RGB1PWM(grn_pwm),.RGB2PWM(red_pwm),.RGBLEDEN('b1),.RGB0(),.RGB1(GRNn),.RGB2(REDn));
assign RED = red_pwm;
assign GRN = grn_pwm;
endmodule
+141
View File
@@ -0,0 +1,141 @@
// ==================================================================
// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ------------------------------------------------------------------
// Copyright (c) 2017 by Lattice Semiconductor Corporation
// ALL RIGHTS RESERVED
// ------------------------------------------------------------------
//
// Permission:
//
// Lattice SG Pte. Ltd. grants permission to use this code
// pursuant to the terms of the Lattice Reference Design License Agreement.
//
//
// Disclaimer:
//
// This VHDL or Verilog source code is intended as a design reference
// which illustrates how these types of functions can be implemented.
// It is the user's responsibility to verify their design for
// consistency and functionality through the use of formal
// verification methods. Lattice provides no warranty
// regarding the use or functionality of this code.
//
// --------------------------------------------------------------------
//
// Lattice SG Pte. Lt++++++++++++++++d.
// 101 Thomson Road, United Square #07-02
// Singapore 307591
//
//
// TEL: 1-800-Lattice (USA and Canada)
// +65-6631-2000 (Singapore)
// +1-503-268-8001 (other locations)
//
// web: http://www.latticesemi.com/
// email: techsupport@latticesemi.com
//
// --------------------------------------------------------------------
//
// Project: iCE5UP 5K RGB LED Tutorial
// File: testbench.v
// Title: LED PWM control
// Description: Creates RGB PWM per control inputs
//
//
// --------------------------------------------------------------------
//
//------------------------------------------------------------
// Notes:
//
//
//------------------------------------------------------------
// Development History:
//
// __DATE__ _BY_ _REV_ _DESCRIPTION___________________________
// 04/05/17 RK 1.0 Initial tutorial design for Lattice Radiant
//
//------------------------------------------------------------
// Dependencies:
//
//
//
//------------------------------------------------------------
//------------------------------------------------------------
//
//
// Testbench
//
//------------------------------------------------------------
`timescale 1ns/1ps
module tb;
//GSR GSR_INST ( .GSR(1));
//PUR PUR_INST ( .PUR(1));
reg clk12M;
reg rst;
reg [9:0]data_input;
reg data_valid;
wire RED;
wire GRN;
wire alarm;
led_top dut(.clk12M(clk12M),
.rst(rst),
.data_input(data_input),
.data_valid(data_valid),
.RED(RED),
.GRN(GRN),
.alarm(alarm)
);
initial
begin
clk12M=1'b0;
end
always
#41.666666 clk12M=~clk12M; //clock generation
initial
begin
rst=1'b1;
data_input=10'b0000000010; // data for green
data_valid=1'b0;
#500000
rst=1'b0;
#500000
data_valid = 1'b1;
#500000
data_valid = 1'b0;
#500000
rst=1'b1;
#500000
rst=1'b0;
data_valid=1'b1;
data_input=10'b1000000001; // data for yellow
#500000
data_valid=1'b0;
data_input = 10'b1100000001; //data for red
#500000
data_valid = 1'b1;
#500000
data_input=10'b1000000001; // data for yellow
#500000
rst=1'b1;
#500000
$stop;
end
initial
begin
$monitor("time=%t,rst=%d,",$time,rst);
end
endmodule
+155
View File
@@ -0,0 +1,155 @@
// ==================================================================
// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ------------------------------------------------------------------
// Copyright (c) 2017 by Lattice Semiconductor Corporation
// ALL RIGHTS RESERVED
// ------------------------------------------------------------------
//
// Permission:
//
// Lattice SG Pte. Ltd. grants permission to use this code
// pursuant to the terms of the Lattice Reference Design License Agreement.
//
//
// Disclaimer:
//
// This VHDL or Verilog source code is intended as a design reference
// which illustrates how these types of functions can be implemented.
// It is the user's responsibility to verify their design for
// consistency and functionality through the use of formal
// verification methods. Lattice provides no warranty
// regarding the use or functionality of this code.
//
// --------------------------------------------------------------------
//
// Lattice SG Pte. Lt++++++++++++++++d.
// 101 Thomson Road, United Square #07-02
// Singapore 307591
//
//
// TEL: 1-800-Lattice (USA and Canada)
// +65-6631-2000 (Singapore)
// +1-503-268-8001 (other locations)
//
// web: http://www.latticesemi.com/
// email: techsupport@latticesemi.com
//
// --------------------------------------------------------------------
//
// Project: iCE5UP 5K RGB LED Tutorial
// File: testbench.v
// Title: LED PWM control
// Description: Creates RGB PWM per control inputs
//
//
// --------------------------------------------------------------------
//
//------------------------------------------------------------
// Notes:
//
//
//------------------------------------------------------------
// Development History:
//
// __DATE__ _BY_ _REV_ _DESCRIPTION___________________________
// 04/05/17 RK 1.0 Initial tutorial design for Lattice Radiant
//
//------------------------------------------------------------
// Dependencies:
//
//
//
//------------------------------------------------------------
//------------------------------------------------------------
//
//
// Testbench
//
//------------------------------------------------------------
class Rst_rnd;
rand bit [1:0] data;
constraint Rst_rnd
{
data dist {0:=70,1 :=30};
}
endclass
class Data_valid_rnd;
rand bit [1:0] data;
constraint Data_valid_data
{
data dist {0:=10,1 :=90};
}
endclass
class Data_input_rnd;
rand bit [7:0] data;
endclass
`timescale 1ns/1ps
// inputs and outputs
module tb;
reg clk12M;
reg rst;
reg [7:0]data_input;
reg data_valid;
wire RED;
wire GRN;
wire alarm;
//random
Rst_rnd rst_rnd = new();
Data_valid_rnd data_valid_rnd = new();
Data_input_rnd data_input_rnd = new();
// connect module
led_top dut(.clk12M(clk12M),
.rst(rst),
.data_input(data_input),
.data_valid(data_valid),
.RED(RED),
.GRN(GRN),
.alarm(alarm)
);
//clock
initial
begin
clk12M=1'b0;
end
always
#41.666666 clk12M=~clk12M; //clock generation
int cycles = 0;
//random test
initial begin
repeat (50) begin
#50000
cycles =cycles+1;
rst_rnd.randomize();
data_input_rnd.randomize();
data_valid_rnd.randomize();
rst = rst_rnd.data;
data_input = data_input_rnd.data;
data_valid = data_valid_rnd.data;
// assertions
// assert that reset resets
assert property ( @(posedge clk12M) (##1 rst) |=> !alarm);
// assert color green
assert property(@(posedge clk12M) disable iff (rst | !data_valid| alarm) ((data_input < 100) |=> ##4 (!RED && GRN));
//assert color yellow
assert property(@(posedge clk12M) disable iff (rst | !data_valid| alarm) ((data_input >= 100) && (data_input <= 168))|=> ##4 (RED && GRN));
//assert color red + alarm
assert property(@(posedge clk12M) disable iff (rst | !data_valid) (data_input > 168) |=> ##4 (RED && !GRN && alarm));
$monitor("time=%t,cycle%d, rst=%d, data_input=%d, data_valid = %d, RED=%d, GRN=%d, alarm=%d",$time,cycles,rst,data_input, data_valid, RED, GRN, alarm);
end
$stop;
end
endmodule
+57
View File
@@ -0,0 +1,57 @@
`include "../spi_interface.v"
`include "../fsm/Fsm.sv"
`include "../Bus_if/Bus_if.sv"
`include "../timer_port/timer_top.sv"
module Top(
input wire clk,
input wire rst,
input wire endOfConv,
output wire LEDg,
output wire LEDr,
output wire AlarmAmpel
);
// Bus (Interface)
Bus_if bus(.clk(clk));
// SPI Interface
// FSM
Fsm fsm(
.clk(clk),
.inAlarmAmpel(bus.AlarmAmpel),
.inDataValid(bus.DataValid),
.inTasteAktiv(bus.TasteAktiv),
.outAlarm_R(bus.Alarm_R),
.outSendData(bus.SendData),
.outTimerEN(bus.TimerEN)
);
// Parallelport
parallelport parallelport1 (
.inClk(clk),
.inTimerMeas(bus.TimerMeas),
.inEndOfConv(endOfConv),
.inData(bus.Data),
.outDataValid(bus.DataValid),
.outData(bus.Data)
);
// FRAM-Controller
// Timer
timer timer1 (
.inClk(clk),
.inTaste(bus.Taste),
.inEN(bus.TimerEN),
.outReadTemp(bus.ReadTemp),
.outTasteAktiv(bus.TasteAktiv)
);
// Ampelsteuerung
led_top ampelsteuerung (
.clk12M(clk),
.rst(rst),
.data_input(bus.Data),
.data_valid(bus.DataValid),
.RED(LEDr),
.GRN(LEDg),
.alarm(bus.AlarmAmpel)
);
assign AlarmAmpel = bus.AlarmAmpel;
endmodule
+5
View File
@@ -0,0 +1,5 @@
`include "Top.sv"
module tb_Top;
endmodule
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

@@ -5,6 +5,45 @@
Soft IP Version: 1.0.0
2022 05 31 12:27:15
*******************************************************************************/
/*******************************************************************************
SPI Interface Ports
trying to follow instructions from:
https://www.chipverify.com/systemverilog/systemverilog-interface
*******************************************************************************/
interface spi_interface_ports (input clk);
// Connection to BUS side (internal)
// Inputs from BUS
logic sb_clk_i; // Clock
logic sb_stb_i; // Chip Select from FRAM-Controller who is SPI-Master
logic sb_wr_i; // Write/Read from FRAM-Controller
logic sb_adr_i[7:0]; // Adddress from FRAM-Controller
logic sb_dat_i[7:0]; // Data in from FRAM-Controller
// Outputs to BUS
logic sb_dat_o[7:0]; // Data out to FRAM-Controller
logic sb_ack_o; // ACK to FRAM-Controller
// Connection to SPI side (external)
logic spi1_mosi_io; // MasterOutSlaveIn --> Master to Slave
logic spi1_miso_io; // MasterInSlaveOut --> Slave to Master
logic spi1_mcs_n_o[3:0]; // MasterChipSelect --> Master selects Slave
logic spi1_sck_io; // Clock for SPI-Slave
// MODPORT form BUS perspective (internal)
// modport output from BUS (internal)
modport BUS (output sb_clk_i, sb_stb_i, sb_wr_i, sb_adr_i[7:0], sb_dat_i[7:0], spi1_miso_io);
// modport input to BUS (internal)
modport BUS (input sb_dat_o[7:0], sb_ack_o, spi1_mosi_io, spi1_mcs_n_o[3:0], spi_sck_io);
// MODPORT from SPI perspective (external)
// modport output from SPI (external)
modport SPI (output spi1_miso_io);
// modport input to SPI (external)
modport SPI (input spi1_mosi_io, spi1_mcs_n_o[3:0], spi_sck_io);
endinterface
/*******************************************************************************
Wrapper Module generated per user settings.
*******************************************************************************/
+87
View File
@@ -0,0 +1,87 @@
// Code your testbench here
// or browse Examples
`timescale 1ns/1ps;
module tb();
reg inClk, inEN, inTaste;
wire outReadTemp;
wire outTasteAktiv;
reg [7:0] inData;
reg inEndOfConv;
wire outDataValid;
wire [7:0] outData;
timer t1 (.inClk(inClk),
.inTaste(inTaste),
.inEN(inEN),
.outReadTemp(outReadTemp),
.outTasteAktiv(outTasteAktiv));
parallelport p1 (.inData(inData),
.inClk(inClk),
.inTimerMeas(outReadTemp),
.inEndOfConv(inEndOfConv),
.outDataValid(outDataValid),
.outData(outData));
always #83 inClk <= ~inClk;
always #1000000000 inEndOfConv <= ~inEndOfConv;
always #100000000 inData = inData +1;
initial begin
//$dumpfile("dump.vcd");
//$dumpvars;
inClk <= 0;
inEN <= 0;
inTaste <= 0;
inData <= 8'b0;
inEndOfConv <= 0;
#1000000000
inTaste = 1;
#1000000000
#1000000000
#1000000000
inTaste = 0;
#1000000000
inEN <= 1;
#1000000000
inEN <= 0;
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
$stop;
end
endmodule
+62
View File
@@ -0,0 +1,62 @@
//clock divider
module timer(input inClk, inTaste, inEN, output reg outReadTemp, outTasteAktiv);
int divide1 = 30000000;
int divide2 = 60000;
logic state = 0;
logic [31:0] count1 = 32'b0;
logic [31:0] count2 = 32'b0;
initial begin
outReadTemp = 0;
outTasteAktiv = 0;
end
always @(posedge inClk or posedge inEN) begin
if(inEN) begin
count1 <= 0;
count2 <= 0;
outReadTemp <= 0;
end
else begin
count1 <= count1 +1;
if(count1>=((2**32)-1))
count1 <= 32'b0;
if(count1 % divide1 == 0)
outReadTemp <= ~outReadTemp;
if(inTaste) begin
count2 <= count2 +1;
if(count2 >= 6000000)
outTasteAktiv = 1;
end
else begin
outTasteAktiv <= 0;
count2 <= 0;
end
end
end
endmodule // clk_divider
module parallelport(input inClk, inTimerMeas, inEndOfConv, [7:0] inData, output reg outDataValid, [7:0] outData);
logic [7:0] storage = 8'b0;
initial begin
outDataValid <= 0;
outData <= 8'b0;
end
always @(posedge inClk) begin
if(inEndOfConv)
storage <= inData;
if(inTimerMeas == 1 && outDataValid == 0) begin
outData = storage;
outDataValid <= 1;
end
else if(inTimerMeas == 0)
outDataValid <= 0;
end
endmodule