⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_sctrl.v

📁 这是一个Verilog HDL编写的RISC cpu的程序
💻 V
字号:
module cpu_sctrl(load_acc,mem_r,mem_w,inc_pc,load_pc,load_ir,
                 halt,opcode,fetch,zero,clk,clk2,reset);
  output load_acc,mem_r,mem_w,inc_pc,load_pc,load_ir,halt; 
  reg load_acc,mem_r,mem_w,inc_pc,load_pc,load_ir,halt; 
  input [2:0] opcode;
  input fetch,zero,clk,clk2,reset;
  parameter Hlt=3'b000,Skz=3'b001,Add=3'b010,And=3'b011,
            Xor=3'b100,Lda=3'b101,Sto=3'b110,Jmp=3'b111;
  always @(negedge reset)
    begin 
      disable ctl_state;
      {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0;
    end
  always @(posedge reset)
    @(posedge fetch)ctl_state;
  task ctl_state;
    begin
      {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000000;
      @(posedge clk)
      {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000100;
      @(negedge clk)
      {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000110;
      @(posedge clk)
      {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000110;
      @(negedge clk)
      if(opcode==Hlt)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b1000001;
      else
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b1000000;
      @(posedge clk)
      if((opcode==Add)||(opcode==And)||(opcode==Xor)||(opcode==Lda))
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000100;
      else
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000000;
      @(negedge clk)
      if(opcode==Jmp)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0010000;
      else if((opcode==Skz)&&zero)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b1000000;
      else if((opcode==Add)||(opcode==And)||(opcode==Xor)||(opcode==Lda))
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0100100;
      else
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000000;
      @(posedge clk)
      if(opcode==Jmp)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b1010000;
      else if(opcode==Sto)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0001000;
      else if((opcode==Skz)&&zero)
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b1000000;
      else if((opcode==Add)||(opcode==And)||(opcode==Xor)||(opcode==Lda))
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0100100;
      else
        {inc_pc,load_acc,load_pc,mem_w,mem_r,load_ir,halt}=7'b0000000;
     end
   endtask
 endmodule 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -