forked from libre-chip/fayalite
		
	add blinky example
This commit is contained in:
		
							parent
							
								
									23a77368b3
								
							
						
					
					
						commit
						a191ece9a5
					
				
					 1 changed files with 50 additions and 0 deletions
				
			
		
							
								
								
									
										50
									
								
								crates/fayalite/examples/blinky.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								crates/fayalite/examples/blinky.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | ||||||
|  | use clap::Parser; | ||||||
|  | use fayalite::{ | ||||||
|  |     clock::{Clock, ClockDomain}, | ||||||
|  |     hdl_module, | ||||||
|  |     int::{DynUInt, DynUIntType, IntTypeTrait, UInt}, | ||||||
|  |     reset::{SyncReset, ToReset}, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #[hdl_module] | ||||||
|  | fn blinky(clock_frequency: u64) { | ||||||
|  |     #[hdl] | ||||||
|  |     let clk: Clock = m.input(); | ||||||
|  |     #[hdl] | ||||||
|  |     let rst: SyncReset = m.input(); | ||||||
|  |     let cd = #[hdl] | ||||||
|  |     ClockDomain { | ||||||
|  |         clk, | ||||||
|  |         rst: rst.to_reset(), | ||||||
|  |     }; | ||||||
|  |     let max_value = clock_frequency / 2 - 1; | ||||||
|  |     let int_ty = DynUIntType::range_inclusive(0..=max_value); | ||||||
|  |     #[hdl] | ||||||
|  |     let counter: DynUInt = m.reg_builder().clock_domain(cd).reset(int_ty.literal(0)); | ||||||
|  |     #[hdl] | ||||||
|  |     let output_reg: UInt<1> = m.reg_builder().clock_domain(cd).reset_default(); | ||||||
|  |     #[hdl] | ||||||
|  |     if counter == int_ty.literal(max_value) { | ||||||
|  |         m.connect(counter, int_ty.literal(0)); | ||||||
|  |         m.connect(output_reg, !output_reg); | ||||||
|  |     } else { | ||||||
|  |         m.connect_any(counter, counter + 1_hdl_u1); | ||||||
|  |     } | ||||||
|  |     #[hdl] | ||||||
|  |     let led: UInt<1> = m.output(); | ||||||
|  |     m.connect(led, output_reg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(Parser)] | ||||||
|  | struct Cli { | ||||||
|  |     /// clock frequency in hertz
 | ||||||
|  |     #[arg(long, default_value = "1000000", value_parser = clap::value_parser!(u64).range(2..))] | ||||||
|  |     clock_frequency: u64, | ||||||
|  |     #[command(subcommand)] | ||||||
|  |     cli: fayalite::cli::Cli, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     let cli = Cli::parse(); | ||||||
|  |     cli.cli.run(blinky(cli.clock_frequency)) | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue