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