在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1378|回复: 1

b

[复制链接]
发表于 2021-11-18 22:21:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
module B_modulation(
         
input               i_clk           ,
input               i_rst           ,
input               i_S_data_valid  ,
input         [7:0] i_S_data        ,
output signed [7:0] o_mod_data      ,
output              o_mod_data_valid

);
  
  
  
   wire signed[7:0] w_sin_data          ;  
   reg        [3:0] mod_state    = 4'd0 ;
   reg        [2:0] bit_cnt      = 3'd0 ;
   reg        [2:0] r_bit_cnt    = 3'd0 ;
   reg        [7:0] r_address    = 8'd0 ;
   reg  signed[7:0] r_mod_data   = 8'sd0;
   reg        [7:0] r_S_data     = 8'd0 ;
   reg              r_rd_rom_en  = 1'b0 ;
   reg              r0_rd_rom_en = 1'b0 ;
   reg              r1_rd_rom_en = 1'b0 ;
   
   
  
   sin_rom sin_rom_inst (
   
.address ( r_address   ),
.clock   ( i_clk       ),
.rden    ( r_rd_rom_en ),
.q       ( w_sin_data  )

);
   always @(posedge i_clk)begin
      if(i_rst)begin
     mod_state   <= 4'd0;
  bit_cnt     <= 3'd0;
  r_address   <= 8'd0;
  r_S_data    <= 8'd0;
  r_rd_rom_en <= 1'b0;
   end
      else begin
         case (mod_state)
   4'd0:begin
            bit_cnt <= 3'd0;
          if(i_S_data_valid)begin
         r_S_data    <= i_S_data;
      mod_state   <= 4'd1    ;
    end   
     end
     
   4'd1:begin
          r_rd_rom_en <= 1'b1    ;
    mod_state   <= 4'd2    ;
        end
   4'd2:begin
           if(r_address >= 8'd127)begin
       r_address   <= 8'd0;
       mod_state   <= 4'd3;
       r_rd_rom_en <= 1'b0;
     end
     else      
                r_address <= r_address + 1'b1;   
        end
     
   4'd3:begin
           if(bit_cnt >= 3'd7)begin
       bit_cnt   <= 3'd0;
       mod_state <= 4'd0;
     end
     else begin     
                bit_cnt   <= bit_cnt + 1'b1;
       mod_state <= 4'd1;
     end
        end   
         endcase
      end   
   end
   
  always @(posedge i_clk)
     r_bit_cnt <= bit_cnt;
   
  always @(*)begin
     case (r_bit_cnt)
  3'd0:begin
         if(r_S_data[7] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= -w_sin_data;
       end
   
     3'd1:begin
         if(r_S_data[6] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
   
     3'd2:begin
         if(r_S_data[5] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
   
     3'd3:begin
         if(r_S_data[4] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
   
     3'd4:begin
         if(r_S_data[3] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
   
     
     3'd5:begin
         if(r_S_data[2] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
   
     3'd6:begin
         if(r_S_data[1] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= - w_sin_data;
       end
        
     3'd7:begin
         if(r_S_data[0] == 1'b1)
       r_mod_data <= w_sin_data;
     else
    r_mod_data <= -w_sin_data;
       end
     endcase
  end
  always @(posedge i_clk)begin
     r0_rd_rom_en <= r_rd_rom_en ;
     r1_rd_rom_en <= r0_rd_rom_en;
  end
   

  assign o_mod_data       = r1_rd_rom_en ? r_mod_data:8'sd0;
  assign o_mod_data_valid = r1_rd_rom_en;


endmodule
发表于 2021-11-19 14:19:28 | 显示全部楼层
发这些搞什么?? 奇怪  灌水吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 23:02 , Processed in 0.015545 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表